鱼C论坛

 找回密码
 立即注册
查看: 839|回复: 4

[已解决]数组指针的地址及其指向的地址

[复制链接]
发表于 2020-4-30 16:23:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有如下数组指针:
int temp[5] = {1 ,2, 3, 4, 5};
int (*p2)[5] = &temp;
printf("p2 = %p\n",p2);
printf("p2+1 = %p\n",(p2+1));
printf("p2+2 = %p\n",(p2+2));
printf("*(p2) = %p\n",*(p2));
printf("*(p2+1) = %p\n",*(p2+1));
printf("*(p2+2) = %p\n",*(p2+2));

运行结果:
        p2 = 0x7ffee2628b80
        p2+1 = 0x7ffee2628b94
        p2+2 = 0x7ffee2628ba8
        *(p2) = 0x7ffee2628b80
        *(p2+1) = 0x7ffee2628b94
        *(p2+2) = 0x7ffee2628ba8

有一点疑问就是,指针p2本身的地址 和 指向的地址*p2是一样的呢?按理说不是应该不一样吗?
望大神能够帮忙答疑解惑!
编译器信息:
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 10.0.0 (clang-1000.10.44.4)
Target: x86_64-apple-darwin17.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
最佳答案
2020-4-30 16:48:14
p2是一个指向一维数组的数组指针
pringtf("%p\n", p2)表示以地址格式打印p2的值,打印的是p2指向的地址,而p2的值正是数组的首元素的地址,就是1
*p2的意思是对p2进行解引用
printf("%p", *p2)的意思是以地址格式打印*(p2)的值,打印的也是p2指向的地址,因为这是一个数组指针指向数组,对p2解引用一次得到的是第一排的首地址,也就是数组的的第一排的第一个元素,就是1
正确的打印p2本身的地址,要用到&取地址符
printf("%p\n", &p2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-30 16:38:05 | 显示全部楼层
你并没有输出 p2 的地址啊

可能是你对这种指针理解有误吧。
你定义的是数组指针,指针指向含有五个int类型数据的一维数组,指针+1调过的 是5个int类型数据的空间
这里 p2和*(p2)其实都是temp的地址,只是他们的意义不一样。
若取p2本身的地址,需要用 &p2

关于数组指针,你可以看看这个帖子。我之前回答的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 16:48:14 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
p2是一个指向一维数组的数组指针
pringtf("%p\n", p2)表示以地址格式打印p2的值,打印的是p2指向的地址,而p2的值正是数组的首元素的地址,就是1
*p2的意思是对p2进行解引用
printf("%p", *p2)的意思是以地址格式打印*(p2)的值,打印的也是p2指向的地址,因为这是一个数组指针指向数组,对p2解引用一次得到的是第一排的首地址,也就是数组的的第一排的第一个元素,就是1
正确的打印p2本身的地址,要用到&取地址符
printf("%p\n", &p2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 17:17:20 | 显示全部楼层
就是要努力呀 发表于 2020-4-30 16:48
p2是一个指向一维数组的数组指针
pringtf("%p\n", p2)表示以地址格式打印p2的值,打印的是p2指向的地址, ...

我明白了。p2指向的内容偏巧就是地址,所以打印“p2指向的地址”和“p2指向的内容”就是一样的了。谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 17:19:37 | 显示全部楼层
sunrise085 发表于 2020-4-30 16:38
你并没有输出 p2 的地址啊

可能是你对这种指针理解有误吧。

谢谢,我明白了。p2加一个会跳5个int,*p2是int temp的地址,所以*p2加一个就会跳1个int。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 19:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表