数组指针和指针数组的区别

数组指针,是指向数组的指针。通常所说的数组指针,只是一个指针,他只能存放一个地址。一般用于多维数组。

举例说明,假设有一个四行五列的二维数组A,C语言认为它是由四个五元素的一维数组首尾相连组成的。当定义一个数组指针P时,让p指向二维数组的首地址,其实他指的也是第一个一维数组的首元素地址,当执行P+1之后,P就指向了第二个一维数组的首元素地址,或者p再+2以后就指向了第四个一维数组数组的首元素地址。

int a[4][5]={{1,2,3,4,5},{6,7,8,9,10}}

(*p)[5]=a;

则*(*(p+1)+1)代表第二行的第二个元素7。

指针数组是由若干指针组成的数组,它是一组指针,而不是一个指针。它和普通的数组一模一样,只是它存放的是指针,也就是地址,而不是元素的值。

如:

int a=2,b=3,c=5;

int*p[3];

p[0]=&a;

p[1]=&b;

p[2]=&c;

则*p[1],*p[2]分别代表3和5。

有什么问题请留言。

指针与数组的关系是什么啊

int a[2][3]; 定义了一个二维函数,每一维数组有三个元素。

int (*pt)[3]; 定义了一个数组指针,也就是定义了一个指向有三个元素的指针,即该指针,每次自加1,地址跳过三个int

pt=a; 就是让pt指向a[0],注意a[0]是一个数组地址,里面有三个元素

对于A选项,pt[0][0]是正确的,pt[0][0]等价于a[0][0]

对于B选项,不正确,因为pt+1就是a[1], *(pt+1)[2]相当于a[3][0]不对。

因为运算符优先级,[]大于*,因此*(pt+1)[2]就是*pt[1+2] 也就是*a[1+2]。而*a[3]就等价于a[3][0]。越界了

改成(*(pt+1))[2]就对了,相当于a[1][2]

对于C选项,正确,*(pt[1]+2) 相当于a[1][2]

对于D选项,正确,*(a[0]+2)相当于a[0][2]

C语言中,如何定义一个‘指针数组’,这个‘指针数组’专门用来存放‘数组指针’。

1、指针:系统为某一个变量开辟单元格,指针便指向此单元格的变量值。

2、数组:系统为某一组数开辟一组单元格,数组首地址便是你定义的数组变量名。

数组和指针的唯一区别是,不能改变数组名称指向的地址。

对于数组来说,数组的首地址,也可以用指针来表示操作,如:

int a[10];

int *p,n;

p = a;

对第一个元素取值,可以用几种方法:

n =a[0];

n = *p;

n = p[0];

n = *(p+0) ;

但是以下语句则是非法的:

readings = totals; // 非法!不能改变 readings totals = dptr; // 非法!不能改变 totals

数组名称是指针常量。不能让它们指向除了它们所代表的数组之外的任何东西。

扩展资料

下面的程序定义了一个 double 数组和一个 double 指针,该指针分配了数组的起始地址。随后,不仅指针符号可以与数组名称一起使用,而且下标符号也可以与指针一起使用。

int main()

{

const int NUM_COINS = 5;

double coins[NUM_COINS] = {0.05, 0.1, 0.25, 0.5, 1.0};

double *doublePtr; // Pointer to a double

// Assign the address of the coins array to doublePtr

doublePtr = coins;

// Display the contents of the coins array

// Use subscripts with the pointer!

cout << setprecision (2);

cout << "Here are the values in the coins array:\n";

for (int count = 0; count < NUM_COINS; count++)

cout << doublePtr [count] << " ";

// Display the contents of the coins array again, but this time use pointer notation with the array name!

cout << "\nAnd here they are again:\n";

for (int count = 0; count < NUM_COINS; count++)

cout << *(coins + count) << " ";

cout << endl;

return 0;

}

程序输出结果:

Here are the values in the coins array: 0.05 0.1 0.25 0.5 1 And here they are again: 0.05 0.1 0.25 0.5 1

当一个数组的地址分配给一个指针时,就不需要地址运算符了。由于数组的名称已经是一个地址,所以使用 & 运算符是不正确的。但是,可以使用地址运算符来获取数组中单个元素的地址。

指针数组定义int*p[n];

[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,

这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样*p=a;这里*p表示指针数组第一个元素的值,a的首地址的值。

数组指针定义int(*p)[n];

()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。

如要将二维数组赋给一指针,应这样赋值:

int a[3][4];

int(*p)[4];//该语句是定义一个数组指针,指向含4个元素的一维数组。

p=a;//将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]

p++;//该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]

扩展资料:

与数组指针关系

数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动);指针数组是数组元素为指针的数组,其本质为数组。

例如:*p[2]是指针数组,实质是一个数组,里面的两个元素都是指针,[]的优先级比*的优先级高,p先与[]结合,形成数组p[2],有两个元素的数组,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量

与二维数组对比

二维数组:如char string_1[10][10]只要定义了一个二维数组,无论赋不赋值,系统都会给他分配相应空间,而且该空间一定是连续的。其每个元素表示一个字符。我们可以通过指定下标对其元素进行修改。

指针数组:如char*str_B[5]系统至少会分配5个连续的空间用来存储5个元素,表示str_B是一个5个元素的数组,每个元素是一个指向字符型数据的一个指针。

如果我做这样的定义:

char a[3][8]={"gain","much","strong"};

char*n[3]={"gain","much","strong"};

他们在内存的存储方式分别如右图所示,可见,系统给数组a分配了

3×8的空间,而给n分配的空间则取决于具体字符串的长度。

此外,系统分配给a的空间是连续的,而给n分配的空间则不一定连续。

由此可见,相比于比二维字符数组,指针数组有明显的优点:一是指针数组中每个元素所指的字符串不必限制在相同的字符长度;二是访问指针数组中的一个元素是用指针间接进行的,效率比下标方式要高。但是二维字符数组却可以通过下标很方便的修改某一元素的值,而指针数组却无法这么做。

举例编辑

数组指针:

#include<stdio.h>

int main()

{

char c[][4]={"哥","哥","我","岸","上","走"};//UTF-8:一个汉字=3个字节

char(*p)[4];

int i;p=c;//将指针定位于c[0]

for(i=0;i<=5;i++)

{

printf("%s,",*(p+i));//或者将*(p+i)替换成*p++

}

printf("\n");

for(i=5;i>=0;i--)

{

printf("%s,",*(p+i));//或者将*(p+i)替换成*--p

}

return 0;

}

指针数组:

#include<stdio.h>

int main()

{

int i;

char*pch[6]={"妹","妹","你","坐","船","头"};

for(i=0;i<6;i++){

printf("%s,",pch<i>);

}

printf("\n");

for(i=5;i>=0;i--){

printf("%s\n",pch<i>);

}

return 0;

}

参考资料:

百度百科——指针数组

本文来自作者[平卉]投稿,不代表米乐号立场,如若转载,请注明出处:https://m.milekids.com/ds/2784.html

(49)

文章推荐

  • 本多忠胜和本多正信什么关系

    网上有关“本多忠胜和本多正信什么关系”话题很是火热,小编也是针对本多忠胜和本多正信什么关系寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。真田左卫门佐幸村,无论任何时候,只要提起1615年发生在日本大阪的那场终结战国乱世的大战,就必定要提到这个名字。这个信浓土

    2025年07月31日
    37
  • 《逆战》躲猫猫怎么卡飞天?

    网上有关“《逆战》躲猫猫怎么卡飞天?”话题很是火热,小编也是针对《逆战》躲猫猫怎么卡飞天?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。逆战躲猫猫卡飞天介绍:逆战卡飞天其实准确的说不叫卡飞天而是卡出图了,卡出图之后别人自然看不到你啦,这样谁都找不到你了,躲猫

    2025年07月31日
    46
  • Chloe香水哪款最好闻?

    Chloe是发过巴黎的一个品牌,应该很多人都知道这个品牌的香水是很受欢迎的,Chloe就是中文中所属偶的蔻依,Chloe香水经常是给人一种丝绢般的感觉,很多女性都比较喜欢,没有用过的可以了解一下,那Chloe香水哪款最好闻?chloe香水怎么样?1、Chloe香水哪款最好闻一支获得市场成功的香水作品

    2025年08月29日
    45
  • 不属于十三经的是什么

    不属于十三经的有《说文》《史记》《道德经》《三国志》《管子》等书籍。《十三经》是南宋形成的十三部儒家经典,为历代儒客文人推崇。分别是《易经》《尚书》《诗经》《周礼》《仪礼》《礼记》《春秋左传》《春秋公羊传》《春秋榖梁传》《孝经》《论语》《孟子》《尔雅》。《十三经》的内容极为宽博,就传统观念而言,《易

    2025年08月07日
    50
  • 实验室制备氯气的方法

    最常用MnO2+4HCl(浓)==加热==MnCl2+2H2O+Cl2↑除了MnO2外,实验室里也可用其他氧化剂来氧化浓盐酸制取氯气。常用的氧化剂有KMnO4,KClO3,Ca(ClO)2等。(1)2KMnO4+16HCl=2KCl+2MnCl2+5Cl2↑+8H2O由于KMnO4

    2025年08月16日
    45
  • 斟鄩的五都荟洛

    网上有关“斟鄩的五都荟洛”话题很是火热,小编也是针对斟鄩的五都荟洛寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。二里头遗址位于洛阳盆地的东部,西距汉魏洛阳故城约5公里,东距偃师商城6公里。二里头遗址背靠邙山,面临伊洛(隋唐洛河改道,今在遗址北部)东南接中岳嵩

    2025年08月21日
    56
  • 整合素αvβ3的表达与哪些因素有关

    首先整合素αvβ3就是整联蛋白,是一种跨膜的异质二聚体,它由两个非共价结合的跨膜亚基,即α和β亚基所组成。细胞外球形结构域是一个露出脂双分子层约20nm的头部,头部可同细胞外基质蛋白结合,细胞内的尾部则与肌动蛋白相连。整联蛋白的两个亚基,α和β链都是糖基化的,并通过非共价键结合在一起。整联蛋白同

    2025年08月24日
    49
  • 郦道元的三峡的翻译和赏析

    三峡郦道元三峡郦道元自三峡七百里中,两岸连山,略无阙处;重岩叠嶂,隐天蔽日,自非亭午分,夜不见曦月。至于夏水襄陵,沿溯阻绝。或王命急宣,有时朝发白帝,暮到江陵,其间千二百里,虽乘奔御风,不以疾也。春冬之时,则素湍绿潭,回清倒影。绝巘多生怪柏,悬泉瀑布,飞漱其间。清荣峻茂,良多趣味。每至晴

    2025年08月06日
    42
  • 国家保护动物排名是怎么样的?

    国家保护动物排名有,儒艮,中华白海豚,中华鲟,短尾信天翁,白腹军舰鸟。1、儒艮儒艮(rúgèn)是一种海洋草食性哺乳动物,是世界上最古老的海洋动物之一,海洋哺乳类中唯一的素食者。它们主要分布于西太平洋及印度洋,喜水质良好并有丰沛水生植物之海域,定时浮出海面换气。因雌性儒艮偶有怀抱幼崽于水面哺乳之习惯

    2026年01月19日
    11
  • 低钠盐和普通盐的区别是什么?

    一、含量不同:低钠盐是将加碘食盐为基础,添加一定量氯化钾。与普通食盐相比,含钠更低,更加健康。平时可以多吃一些低钠盐,这样能够促进血液的运行。二、成分不同:低钠盐是以加碘食盐为基础,添加一定量氯化钾。与普通食盐相比,含钠更低,还富含钾,有助于人体钠钾平衡。适用于中老年人和高血压患者。普通食盐适用人群

    2025年08月23日
    47

发表回复

本站作者后才能评论

评论列表(4条)

  • 平卉
    平卉 2026年01月20日

    我是米乐号的签约作者“平卉”!

  • 平卉
    平卉 2026年01月20日

    希望本篇文章《数组指针和指针数组的区别》能对你有所帮助!

  • 平卉
    平卉 2026年01月20日

    本站[米乐号]内容主要涵盖:生活百科,小常识,生活小窍门,知识分享

  • 平卉
    平卉 2026年01月20日

    本文概览:数组指针,是指向数组的指针。通常所说的数组指针,只是一个指针,他只能存放一个地址。一般用于多维数组。举例说明,假设有一个四行五列的二维数组A,C语言认为它是由四个五元素的一维数...

    联系我们

    邮件:米乐号@sina.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们