指针 地址 数组 混了。。。

s446721902 2010-02-02 07:20:39
int a[5]={1,2,3,4,5};
int t = *(*(&a+1));

t出来的应该是什么
...全文
345 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
y7501272 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 s446721902 的回复:]
引用 31 楼 y7501272 的回复:
t是不确定数 不知道楼主想得到什么结果?

我只想知道为什么
[/Quote]
a代表的是数组首地址 它的值是a[0]的地址 它是一维的
&a叫什么东东我也不晓得 它的值还是a[0]的地址 但是它是二维的
*a就是a[0]的值了 **&a也是a[0]的值

int a[5]={1,2,3,4,5};
int t = *(*(&a+1));

a是一维的 +1 就是+sizeof(int)
&a是二维的 +1 就是+sizeof(a)
所以 (&a+1) 就是一个二维的指针 他的值就是a[5]的地址
因为是二维的所以就要用两个*
*运算符的是右结合的 所以写成这样**(&a+1)是一样的
y7501272 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 y7501272 的回复:]
t是不确定数 不知道楼主想得到什么结果?
[/Quote]
a代表的是数组首地址 它的值是a[0]的地址 它是一维的
&a叫什么东东我也不晓得 它的值还是a[0]的地址 但是它是二维的
*a就是a[0]的值了 **&a也是a[0]的值

int a[5]={1,2,3,4,5};
int t = *(*(&a+1));

a是一维的 +1 就是+sizeof(int)
&a是二维的 +1 就是+sizeof(a)
所以 (&a+1) 就是一个二维的指针 他的值就是a[5]的地址
因为是二维的所以就要用两个*
*运算符的是右结合的 所以写成这样**(&a+1)是一样的
vincent_1011 2010-02-03
  • 打赏
  • 举报
回复
老兄,你肯定漏掉括号了。
&a和&a+1是相差20个字节的,我刚刚调过了
赵4老师 2010-02-03
  • 打赏
  • 举报
回复
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
赵4老师 2010-02-03
  • 打赏
  • 举报
回复
VC6调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编。
s446721902 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 y7501272 的回复:]
t是不确定数 不知道楼主想得到什么结果?
[/Quote]
我只想知道为什么
y7501272 2010-02-03
  • 打赏
  • 举报
回复
t是不确定数 不知道楼主想得到什么结果?
niimp2 2010-02-03
  • 打赏
  • 举报
回复
t值未知.
s446721902 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 haha_ 的回复:]
看都看不懂
自己折磨自己
[/Quote]
以前没这种钻的感觉,所以学的不好,现在出来工作了2个月,感觉知识太缺了,所以有时候要钻牛角了弄懂细节了
haha_ 2010-02-03
  • 打赏
  • 举报
回复
看都看不懂
自己折磨自己
songsu 2010-02-03
  • 打赏
  • 举报
回复
复杂鸟。。。
s446721902 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 flyerwing 的回复:]
引用 23 楼 assassin5616 的回复:
a[0]地址+1指针应该前进四位才对吧,为什么你只前进了一位?你的a是不是char类型,而不是int类型?
引用 19 楼 s446721902 的回复:
引用 18 楼 vincent_1011 的回复:
引用 16 楼 s446721902 的回复:
&a+1出来的是a[0]地址+1。。
老兄,补补功课。
嗯,但是我这边调出来是
a 0x0012ff68
&a 0x0012ff68
&a+1  0x0012ff69
&a[0] 0x0012ff68
这是为什么

引用 2 楼 lizunjie 的回复:
t出来的时5后面的东西

相当于(*(a[1]))
完了,不认识了
[/Quote]
我要崩溃了
flyerwing 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 assassin5616 的回复:]
a[0]地址+1指针应该前进四位才对吧,为什么你只前进了一位?你的a是不是char类型,而不是int类型?
引用 19 楼 s446721902 的回复:
引用 18 楼 vincent_1011 的回复:
引用 16 楼 s446721902 的回复:
&a+1出来的是a[0]地址+1。。
老兄,补补功课。
嗯,但是我这边调出来是
a 0x0012ff68
&a 0x0012ff68
&a+1  0x0012ff69
&a[0] 0x0012ff68
这是为什么
[/Quote]
[Quote=引用 2 楼 lizunjie 的回复:]
t出来的时5后面的东西
[/Quote]
相当于(*(a[1]))
完了,不认识了
assassin5616 2010-02-03
  • 打赏
  • 举报
回复
得,我又武断了,居然平台不同,编译器不同,结果还不一样。
[Quote=引用 22 楼 assassin5616 的回复:]
本来就是这样,&a + 1就是a[0]的地址 +1啊。&a 就是a,这个是乌龟的屁股——规定,没什么好去探究为什么的,就好像引用的引用和引用是同一个东西一样,编译器就这么实现的。
引用 18 楼 vincent_1011 的回复:
引用 16 楼 s446721902 的回复:
&a+1出来的是a[0]地址+1。。


老兄,补补功课。

[/Quote]
assassin5616 2010-02-03
  • 打赏
  • 举报
回复
a[0]地址+1指针应该前进四位才对吧,为什么你只前进了一位?你的a是不是char类型,而不是int类型?
[Quote=引用 19 楼 s446721902 的回复:]
引用 18 楼 vincent_1011 的回复:
引用 16 楼 s446721902 的回复:
&a+1出来的是a[0]地址+1。。


老兄,补补功课。

嗯,但是我这边调出来是
a 0x0012ff68
&a 0x0012ff68
&a+1  0x0012ff69
&a[0] 0x0012ff68
这是为什么
[/Quote]
assassin5616 2010-02-03
  • 打赏
  • 举报
回复
本来就是这样,&a + 1就是a[0]的地址 +1啊。&a 就是a,这个是乌龟的屁股——规定,没什么好去探究为什么的,就好像引用的引用和引用是同一个东西一样,编译器就这么实现的。
[Quote=引用 18 楼 vincent_1011 的回复:]
引用 16 楼 s446721902 的回复:
&a+1出来的是a[0]地址+1。。


老兄,补补功课。
[/Quote]
s446721902 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 cismylife 的回复:]
看到&a就感觉不对劲了
[/Quote]
帮我解惑,呵呵
cismylife 2010-02-03
  • 打赏
  • 举报
回复
看到&a就感觉不对劲了
s446721902 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 vincent_1011 的回复:]
引用 16 楼 s446721902 的回复:
&a+1出来的是a[0]地址+1。。


老兄,补补功课。
[/Quote]
嗯,但是我这边调出来是
a 0x0012ff68
&a 0x0012ff68
&a+1 0x0012ff69
&a[0] 0x0012ff68
这是为什么
s446721902 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 looklzg1108 的回复:]
真正实际开发的时候,是不会出现这样的代码的。
[/Quote]
嗯,一般是不会弄到这个的
加载更多回复(27)

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧