求助c语言关于数组名和指针的问题

int a[]={1,2,3};
int *p=a;
用的时候p[0]和a[0]效果是一样的 都等于1
但为什么if判断p==a的时候却为假?怎样操作才能让他们相等呢

如图,a是数组第一个元素的地址值,一个指针,一般占用4个字节内存大小,p也是个指针,也占用4个字节,两个都是变量,因为赋值,两个存放的值都一样了,但是本身不一样,就想两个纸条写的都是同一个地址。

追问

感谢 这个确实是相等的 是另一个地方的问题导致无输出 饶了半天弯

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-01-01
先说些这个2维数组:int arr[3][4]
可以理解为一个3行四列的矩阵,那么第一维arr[0],arr[1],arr[2]中存的分别是对应行的地址,也就是说arr[0]存的是一个“大小为4的整形数组地址”
这样的话就好理解了,arr存的地址值其实与arr[0]本质上是相同的。都是这个连续空间的开始地址。
第一个问题,arr是个地址变量,因此它本身是个地址,而它存的其实也是个地址。
第二个问题,&arr也是首地址,不过叫“2维数组的首地址”,却别的话就是它有个宽度,举个例子:“&arr+1”其实相当于“&arr[sizeof(a)+1]”这里arr大小为7,那么&arr+1就是从二维数组首地址开始后的第8个整形变量空间的地址。当然从地址值的角度看它们是没有什么却别的,区别在于“指针宽度”
第2个回答  2020-01-01
p==a为真好吧!除非进行相等比较前,你没有将p赋值为a。
相似回答