|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
int main(void)
{
int temp[5] = {1,2,3,4,5};
int (*p2)[5] = &temp;
int i;
for(i=0;i<5;i++)
{
printf("%d\n",*(*p2+i); //如果*p2表示数组temp的地址,那么要打印下一个元素为什么只是给地址加1?整形变量不应该占4个字节吗,地址为什么不加4?
}
return 0;
}
只需要记着指针+1,不是只加一个字节!取决于对应指针的类型,在64位编译器的环境下:
char *p p+1代表p加1个字节
int *p p+1代表p加4个字节
float *p p+1代表p加4个字节
double *p p+1代表p加8个字节
。。。
没有什么好理解不好理解的,就是这么规定的!
可以参考以下程序加以验证!
- #include <stdio.h>
- int main()
- {
-
- char *s="abcd";
- printf("%p\n",s);
- printf("%p\n",s+1);
- printf(".........\n");
- int *temp="abcd";
- printf("%p\n",temp);
- printf("%p\n",temp+1);
- return 0;
- }
- //输出结果
- // 0x400634
- // 0x400635
- // .........
- // 0x400634
- // 0x400638
复制代码
|
|