int a[5][5]={0}; int *p[5]; 为什么不能p=a呢

如题所述

①你定义的是数组列指针,其实你可以这样想p[5]代表5个指针p[0],p[1]~p[4],
②我也看了你的追问p确实是p[0]的地址,你让p[0]的地址等于a[0]的地址,这就意味着 指针和数组同享一个地址,因此a[0]的地址也是p[0]的地址,但是不意味着p[0]就是a[0]了,试想在同一个座位上做两个不同的人,他们自然不会舒服的,因此造成形参不一,发生冲突
③回到①,因为p[i]为列指针,因此赋值时 同一般的列指针相同,如int *fp;访问a[5][5]时,必须给fp赋值成fp=a[0],这样fp=&a[0][0],同理p[0]=a[0],这样p[0]=&a[0][0]
访问数组时直接可以是 *(p[i]+j)或*p[i][j]
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-18
当定义int *p[5]时, p是一个数组, 含有5个int *的元素.
所以赋值只能是赋值p[0]到p[4], 而不能改变p本身的值(数组名不能赋值.)
如果要p=a这样赋值,需要定义数组指针

int (*p)[5];
p=a;本回答被网友采纳
第2个回答  2012-04-07
p=*a这样才行。P指针是指向地址的 a是二维数组是不可以直接付给p的
第3个回答  2012-04-07
拜托。p是指针,而且a还是二维数组怎么能相等追问

p代表的是&p[0]对吧,a代表&a[0],为什么p[0]=a[0]没问题

int a[5][5]={0}; int *p[5]; 为什么不能p=a呢
③回到①,因为p[i]为列指针,因此赋值时 同一般的列指针相同,如int *fp;访问a[5][5]时,必须给fp赋值成fp=a[0],这样fp=&a[0][0],同理p[0]=a[0],这样p[0]=&a[0][0]访问数组时直接可以是 *(p[i]+j)或*p[i][j]...

如果int[4][5];int(*p)[5];p=a;这里为什么不用p=*a
int a[5]={1,3,5,7,9},*p;p=a[2];\/\/ ++p是先将p执行++,再用p进行运算;而p++是先将p进行运算,再执行++ \/\/ 这里的++体现为指针指向地址的运算,即以一个int单元为单位1进行++操作 printf("%d ",*(++p));\/\/ p-a的运算也是以一个(int)单元作为单位1进行计算 printf("%d\\n"...

int *p int a[4][5] p=a和p=&a[0][0]的区别
但是若p=a;p++就是&a[1]p=&a[][];p++就是&a[0][1];p=a;p++和&a[1]等价

int a[5] int (*p)[5]; 下面语法正确的选项是() A p=a B p=&a C p...
p定义为一个指针,这个指针指向一个数组,这个数组有5个int类型的元素 a定义为一个有5个int类型元素的数组,取a的地址赋值给P是合理的

C语言指针问题:在定义指针时*p=a和p=a有区别吗?
当然有区别,区别很大,*p=a,就是给指针的表示的地址赋值,也就是赋值给指针指向的存储单元;而p=a,则表示给指针赋值,也就是指针的地址变成了a。两者一个指明了具体值大小,一个指明了具体位置。

...5X5 矩阵 a 中任意两行进行交换,交换时不能使用数组.
\\n");}int main(){ int a[5][5]={0}; int (*p)[5]; p=a; for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { *(*(p+i)+j)=rand()%32; } } printf("Initial Array:\\n"); for(...

int *p[5]和int (*p)[5]的差别
int *p[5]; 是指针数组, 有 5 个成员,每个成员都是一个指针,共有5 个指针 int (*p)[5]; 小括号优先,所以 是 1个指针,用来指向 有5个元素的数组。--- 一般来说 int (*p)[n]; 是数组指针(也称行指针)()优先级高,说明p是一个指针,指向一个整型的一维数组,这个一维数组...

C语言中int *p[5]与 int (*p)[5]的区别
二、含义不同:第二个就是这个指针所指的值是一个大小为5个int的数组的首地址。p+1(数组地址+1)代表内存地址下移了5个单位。三、使用不同:int (*p)[5];int a[10][5];p=&a[1]; \/\/ 现在(*p)就等于a[1] 所以 a[1][2]可以表示为(*p)[2]...

char a[5][5]={{""},{""},{""},{""},{""}}; \/\/方正 char le[3]=...
a数组可以看成是个指向指针的指针,也就是**a.*p_a只是个普通指针.类型不匹配!

关于数组首地址赋值给指针和数组指针的问题
int *p定义了一个指向int型的指针p。而a本身已经是指向int型的指针了,对a做取值操作,返回的结果是int **类型的,造成类型不匹配,所以不能这样写:int *p = &a;而int (*pa)[5]定义了一个指向5个元素的int数组的指针,而a只是数组的首地址,&a才是数组的指针,同样也是因为类型不匹配。

相似回答