社区
C++ 语言
帖子详情
指针 地址 数组 混了。。。
s446721902
2010-02-02 07:20:39
int a[5]={1,2,3,4,5};
int t = *(*(&a+1));
t出来的应该是什么
...全文
377
47
打赏
收藏
指针 地址 数组 混了。。。
int a[5]={1,2,3,4,5}; int t = *(*(&a+1)); t出来的应该是什么
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
二维
数组
与
指针
、
指针
数组
、
数组
指针
的用法
二维
数组
和
指针
⑴ 用
指针
表示二维
数组
元素。要用
指针
处理二维
数组
,首先要解决从存储的角度对二维
数组
的认识问题。我们知道,一个二维
数组
在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整体,即视为一个大的
数组
元素时,这个存储的二维
数组
也就变成了一个一维
数组
了。而每个大
数组
元素对应二维
数组
的一行,我们就称之为行
数组
元素,显然每个行
数组
元素都是一个一维
数组
下面我们讨论
指针
和二维
数组
元素的...
二维
数组
的
地址
,以及二维
数组
的
地址
写法 ,
数组
指针
,
数组
指针
和二维
数组
的配合应用
1、二维
数组
的
地址
int a[3][4] = {{1,3,5,7},{9,11,13,15},{17,19,21,23}} a是二维
数组
名 (
数组
的)名字 ==
地址
(行) 父
数组
(名) = a
地址
(列) 子
数组
(名 )= a[0] 一维
数组
{1,3,5,7}的名字 a[1] ...
C语言
指针
:
指针
数组
、
数组
指针
、函数
指针
及函数
指针
数组
指针
数组
:存放
指针
的
数组
。
数组
指针
变量:存放的是
数组
的
地址
。 函数
指针
变量:存放的是函数
地址
。 函数
指针
数组
:存储函数
地址
的
数组
。 转移表所指的就是运用函数
指针
数组
以
数组
的方式去调用里面的函数。
【C语言】
指针
数组
和
数组
指针
的区别
的情况就更好理解了,在这里“()”的优先级比 “[ ]” 高,“ * ”号和 p2 构成一个
指针
的定义,
指针
变量名为 p2,int 修饰的是
数组
的内容,即
数组
的每个元素。p1 先与 “[]” 结合,构成一个
数组
的定义,
数组
名为 p1,int *修饰的是
数组
的内容,即
数组
的每个元素。
指针
数组
:首先它是一个
数组
,
数组
的元素都是
指针
,
数组
占多少个字节由
数组
本身的大小决定,每一个元素都是一个
指针
,在 32 位系统下任何类型的
指针
永远是占 4 个字节。
指针
数组
可以说成是”
指针
的
数组
”,首先这个变量是一个
数组
。
数组
名a、
数组
名取
地址
&a、
数组
首
地址
&a[0]、
数组
指针
*p
数组
名a、
数组
名取
地址
&a、
数组
首
地址
&a[0]、
数组
指针
*p
C++ 语言
65,212
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章