马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
程序如下:#include <stdio.h>
int main()
{
int temp[5] = {1,2,3,4,5};
int (*p2)[5] = &temp;
int i;
printf("temp = %0x\ntemp+1 = %0x\np2 = %0x\np2+1 = %0x\n", temp, temp+1, p2, p2+1);
printf("*p2 = %0x\n*p2+1 = %0x\n*(p2+1) = %0x\n", *p2, *p2+1, *(p2+1));
printf("*(*p2) = %0x\n*(*p2+1) = %0x\n*(*(p2+1)) = %0x\n", *(*p2), *(*p2+1), *(*(p2+1)));
printf("================================================\n");
p2++;
printf("temp = %0x\ntemp+1 = %0x\np2 = %0x\np2+1 = %0x\n", temp, temp+1, p2, p2+1);
printf("*p2 = %0x\n*p2+1 = %0x\n*(p2+1) = %0x\n", *p2, *p2+1, *(p2+1));
printf("*(*p2) = %0x\n*(*p2+1) = %0x\n*(*(p2+1)) = %0x\n", *(*p2), *(*p2+1), *(*(p2+1)));
return 0;
}
运行结果:
可见:
temp是常量,代表数组的第一个地址
temp+1是地址计算,因为是int型数组,故temp+1相当于地址后移4个字节。
后面的就看不懂了…………
那么我根据结果推论一下:
1、p2是一个指针变量,类型不能确定……每次自增数值好像都在变化……这似乎有意义,但似乎又没有意义,求解释……
2、*p2也是一个指针变量,类型是int指针,而且正确的指向了temp!
还有很多疑问,我都不知道怎么写,那么大体上问一下如下几个问题:
1、p2到底是什么变量?类型如何?指向的是什么?
2、int (*p2)[5]这样的表达式,到底声明了什么样的变量数组?创建了几个数组?分别是什么类型?
3、2里面这种表达式的实用性?例子?
|