关于c语言 把数组名赋予指针的问题。
关于c语言把数组名赋予指针的问题。inta[3][3]={0};int*p1=a,p2=a[0];a和a[0]的值都是a[0][0]的地址。但p1指向的是1维数组,p2指...
关于c语言
把数组名赋予指针的问题。int a[3][3]={0};
int* p1=a,p2=a[0];
a和a[0]的值都是a[0][0]的地址。
但p1指向的是1维数组,p2指向的是一个元素。
由于a指向一维数组,a[0]指向元素。
是否说明赋给指针p1,p2不只是地址值,还有它的指向。如果是这样,那么这个指向是怎么表示的或怎么实现的呢? 展开
把数组名赋予指针的问题。int a[3][3]={0};
int* p1=a,p2=a[0];
a和a[0]的值都是a[0][0]的地址。
但p1指向的是1维数组,p2指向的是一个元素。
由于a指向一维数组,a[0]指向元素。
是否说明赋给指针p1,p2不只是地址值,还有它的指向。如果是这样,那么这个指向是怎么表示的或怎么实现的呢? 展开
2个回答
展开全部
你的理解从本质上就有问题
int *p1=a不能通过编译,因为a是二维数组指针,类型是int (*)[3],无法转换到int*型。必须用int (*p1)[3]=a或者int *p1=a[0]才可以。同理int p2=a[0]无法通过编译,因为a[0]是一个int指针而不是一个int元素,必须用int *p2=a[0]才可以。
a代表二维数组,它指向的是一维数组a[0]的地址,该地址恰好和a[0][0]的地址相等,但类型上有着本质区别,a是一个是int*数组的指针而a[0]是一个int*元素的指针。a[0]代表的是二维数组a的第一行,是一个一维数组,指针a[0]是int*型,它指向该一维数组的首元,即a[0][0]的地址。
int *p1=a不能通过编译,因为a是二维数组指针,类型是int (*)[3],无法转换到int*型。必须用int (*p1)[3]=a或者int *p1=a[0]才可以。同理int p2=a[0]无法通过编译,因为a[0]是一个int指针而不是一个int元素,必须用int *p2=a[0]才可以。
a代表二维数组,它指向的是一维数组a[0]的地址,该地址恰好和a[0][0]的地址相等,但类型上有着本质区别,a是一个是int*数组的指针而a[0]是一个int*元素的指针。a[0]代表的是二维数组a的第一行,是一个一维数组,指针a[0]是int*型,它指向该一维数组的首元,即a[0][0]的地址。
追问
嗯嗯,谢谢
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询