首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c的指针有关问题

2012-02-08 
c的指针问题请试着运行下面的代码:#include stdio.hintmain(void){intzippo[4][2]{1}printf( zippo%

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]的地址

热点排行