当前位置: 技术问答>linux和unix
C程序问题:哪个高手帮我解释下下面的问题,主要是a[0]和&[0] 的区别 和编译器的问题??
来源: 互联网 发布时间:2016-12-29
本文导语: #include "stdio.h" int main() { int a[3][3] = {0,1,2,3,4,5,6,7,8}; int *p1 = a[0]; int *p2 = &a[0]; printf("*(p1+1) = %d n",*(p1+1)); printf("*(p2+1) = %d n",*(p2+1)); return 0; } /* 这个程序在vc++6.0中编译出错,原因在于 int *p2 = &a[0]; 这...
#include "stdio.h"
int main()
{
int a[3][3] = {0,1,2,3,4,5,6,7,8};
int *p1 = a[0];
int *p2 = &a[0];
printf("*(p1+1) = %d n",*(p1+1));
printf("*(p2+1) = %d n",*(p2+1));
return 0;
}
/*
这个程序在vc++6.0中编译出错,原因在于 int *p2 = &a[0]; 这句赋值出错,
但是在linux gcc中不会 ???
[root@localhost test]# ./a.out
*(p1+1) = 1
*(p2+1) = 1
[root@localhost test]#
*/
|
gcc加 -W你就会发现gcc也报warning
a[0]本来就是个数组名。特殊的是他也是一个地址。
所以 int *p = a[0]没问题
但是如果 &a[0],这种情况,就只能是数组的地址,在这一点检查上VC比gcc要严格一点而已。
a[0]本来就是个数组名。特殊的是他也是一个地址。
所以 int *p = a[0]没问题
但是如果 &a[0],这种情况,就只能是数组的地址,在这一点检查上VC比gcc要严格一点而已。
|
a[0]是一个一维数组 int [3]类型;所以,&a[0]返回的地址 int (*)[3]类型;因此,你的p应该声明为int (*p)[3]; p = &a[0];
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。