读书人

c的指针有关问题

发布时间: 2012-02-08 19:52:21 作者: rapoo

c的指针问题
请试着运行下面的代码:
#include <stdio.h>
int main(void)
{
int zippo[4][2]={1};
printf( "zippo=%p\n&zippo=%p\n&zippo[0]=%p\n&zippo[0][0]=%p ",
zippo,&zippo,&zippo[0],&zippo[0][0]);
return 0;
}
为什么以上的几个地址会相同?如zippo的值是数组首元素的地址,而&zippo是不是该指针的指针?若改用指针变量值就不同了如:
int *p=zippo[0];
printf( "\np=%p,&p=%p ",p,&p);
请说明其工作原理,谢谢。

[解决办法]
这里zippo不是指针,而是数组的符号地址,虽然可以象指针一样访问,但不能用 zippo=... 赋值


printf( "zippo=%p\n&zippo=%p\n&zippo[0]=%p\n&zippo[0][0]=%p ",
zippo,&zippo,&zippo[0],&zippo[0][0]);
中,
zippo就代表了数组地址,而&zippo是求数组(而不是指针)的地址,因此是一样的;

&zippo[0]求二维数组第一个元素数组(一维)的起始地址,而数组的第一个元素的地址与数组起始地址相同;

&zippo[0][0]求二维数组的第一个一维数组元素zippo[0](int[2]类型)的第一个int元素的地址,等同于zippo[0]的地址

读书人网 >C语言

热点推荐