数组指针问题? p不是指向a的指针吗 为什么p跟a相等

作者&投稿:荆影 (若有异议请与网页底部的电邮联系)
~ 没错,数组里面,数组名,数组名的地址,和首元素的地址都是相同的,不管是几维,都有这个规律。
虽然地址相同,但是指针不同,访问的方式也不同。
如上面,p和a的值虽然相同,但是p增加1,就相当于跨越了一个5个int的数组。
而a增加1,只是跨越一个int。
也就是说
p+n=a+5*n

(1)int
(*p)[5];
//p是一个指针,它指向一个长度为5的一维数组。但要注意:若有内存|__|__|__|__|__|__|
^
(此处为p起始位置)
^
(此处为p++位置)
(2)int
a[5];//可以理解为二维数组a
[5]
[1]
,这样的话对于
a[5]来说
p=&a和对于
a
[5]
[1]
来说
p=a
意义是相同的,都指向a[0]


榆中县18455913747: 数组指针问题? p不是指向a的指针吗 为什么p跟a相等
端妮人免: 没错,数组里面,数组名,数组名的地址,和首元素的地址都是相同的,不管是几维,都有这个规律.虽然地址相同,但是指针不同,访问的方式也不同.如上面,p和a的值虽然相同,但是p增加1,就相当于跨越了一个5个int的数组.而a增加1,只是跨越一个int.也就是说 p+n=a+5*n

榆中县18455913747: p不是指向数组的指针吗??不懂 -
端妮人免: 你理解错指针的意思了 char* p就定义一个char型指针p,可以指向字符,也可以指向字符数组.char *p[3]倒像是定义了一个指针数组,但指针数组char** p[3]才对. 正确的是 char* p; p=a[0]; //代表数组a的首地址.图片太模糊了,下次建议复制代码上来.

榆中县18455913747: 数组指针是不是不能单独指向数组里的一个数?(紧急) -
端妮人免: 可以如是C的话.int a[10],*p; p=a; /*指向数组的第一个数的地址*/ 你要的第N维护个数的地址就是:p+n 那个元素就是*(p+n) 出岔子p=a外,还可以写成p=&a[0],都是一样的.

榆中县18455913747: C语言用指针引用数组元素 -
端妮人免: (*p)[3]是定义一个指向一维数组的指针,数组元素为三.也就是说p指向的其实是a[0],a[1],a[2]这样的形式. p=a;其实就是把第0行的首地址赋值给p. 所以答案C中p[1]即是把第1行的首地址给p,在此基础上向后移一位,取出地址中的元素数值. *(p[1]+1)相当于a[1][1].所以是对的. B的形式是对的,但是它相当于a[2][1],超出界限所以为错.剩下的两个格式就不对.

榆中县18455913747: 我定义了一个数组和一个指针 int a[10]; int *p; 为什么p=a;是正确的而a=p是错误的 -
端妮人免: 这明显不行啊.解释如下:数组也是一个指针,但数组在编译的时候地址是已经确定的,是不能改变的.也就是说你可以给数组对所指向的地址赋值,如下:*a=10;但不可以对数组变量赋值,如:a=p;纯指针更加灵活,你可以对它本身赋值,也就是改变它所指向的地址,也可以对它所指向的址赋值.如果执行p=a;则p也指向了a所指向的地址.不明白给我留言.

榆中县18455913747: 数组的指针是怎么回事啊? -
端妮人免: 就是指针是指向数组的 比如说 int (*p)[4]; 这就是数组指针,指针是指向含有4个整形元素的数组,这里面得p是指针变量,并不是指针常量(数组名),这个要和 int *p[4]区分开来(这里的p才是才是数组名,这叫指针数组,数组里的每个元素都是指针变量,都是指向整形元素的),而int (*p)[4];中的p是指针变量!他可以通过++,--运算来变换的,int *p[4]中的p相当于数组名,等于是指针常量是不能通过++、--运算的! 数组指针是指向数组首元素的地址的指针,其本质为指针; 指针数组是数组元素为指针的数组,其本质为数组.

榆中县18455913747: 一个关于数组指针的问题int a[3]={0,1,2}; int *p=a 和int (*p)[3]=a有什么不一样 -
端妮人免: 你只要把int (*p)[3]看作一个2为数组的指针就行了.这个p不能指向a了,p要指向2级地址(如:2维数组的a、&a[0]).

榆中县18455913747: a[5]是一个一维数组,定义指针变量int *p,那么请问p=a与p=&a的区别是什么 -
端妮人免: 在数组中,数组名表示首地址常量.a等同于&a[0].所以p=a.就是p指向a首地址.p=&a是错的,a已经是地址里.可以写p=&a[0].

榆中县18455913747: c语言多极指针里面的这个*p==*a是为什么? 为什么不是*p==a, **p==*a -
端妮人免: a和p都是字符数组的指针,因此*p和*a都是一个指向字符指针(也可理解为一个字符数组).char**p;说明了p的类型,p=a;是将a赋值给p,二者相同.因此有以上的执行结果.int *p.这是一个指针变量,它就是一个只能用来装地址的变量.p++就等于p+1啊,他们都是指向一个位置的,如在vc下,一个整形数据占4字节,p=2000(地址,二进制的,这样写方便你懂),*p++是说用后p指向的地址向下移一位,所以p=2004;p++是用完后就加,*(p+1)说的是指向2004这个地址!这个问题还是到专业的网站去咨询一下吧

榆中县18455913747: 怎么更好的去理解数组指针? -
端妮人免: 一:数组指针:数组名本身就是一个指针,指向数组的首地址.注意这是声明定长数组时,其数组名指向的数组首地址是常量.而声明数组并使某个指针指向其值指向某个数组的地址(不一定是首地址),指针取值可以改变.二:数组指针:是...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网