C语言中数组&取地址的问题
2013-12-03 00:13
369 查看
假如我们的a的地址是:0Xbfe2e100, 而且是32位机,那么这个程序会输出什么?
第一条printf语句应该没有问题,就是 bfe2e100
第二条printf语句你可能会以为是bfe2e101。那就错了,a+1,编译器会编译成 a+ 1*sizeof(int),int在32位下是4字节,所以是加4,也就是bfe2e104
第三条printf语句可能是你最头疼的,我们怎么知道a的地址?我不知道吗?可不就是bfe2e100。那岂不成了a==&a啦?这怎么可能?自己存自己的?也许很多人会觉得指针和数组是一回事,那么你就错了。如果是 int *a,那么没有问题,因为a是指针,所以 &a 是指针的地址,a 和 &a不一样。但是这是数组啊a[],所以&a其实是被编译成了 &a[0]。
第四条printf语句就很自然了,就是bfe2e104。还是不对,因为是&a是数组,被看成int(*)[5],所以sizeof(a)是5,也就是5*sizeof(int),也就是bfe2e114。
第一条printf语句应该没有问题,就是 bfe2e100
第二条printf语句你可能会以为是bfe2e101。那就错了,a+1,编译器会编译成 a+ 1*sizeof(int),int在32位下是4字节,所以是加4,也就是bfe2e104
第三条printf语句可能是你最头疼的,我们怎么知道a的地址?我不知道吗?可不就是bfe2e100。那岂不成了a==&a啦?这怎么可能?自己存自己的?也许很多人会觉得指针和数组是一回事,那么你就错了。如果是 int *a,那么没有问题,因为a是指针,所以 &a 是指针的地址,a 和 &a不一样。但是这是数组啊a[],所以&a其实是被编译成了 &a[0]。
第四条printf语句就很自然了,就是bfe2e104。还是不对,因为是&a是数组,被看成int(*)[5],所以sizeof(a)是5,也就是5*sizeof(int),也就是bfe2e114。
相关文章推荐
- C语言编译数组地址分配问题
- C语言中与指针相关问题——论数组名和数组名取地址的关系
- C语言数组中的地址偏移问题
- C语言数组首地址问题
- C语言数组中的地址偏移问题
- 数组首元素地址和数组地址、int *ptr=(int *)(&a+1)问题的探讨
- 【C语言】数组名&地址&地址中的值的访问
- C语言数组中的地址偏移问题
- C语言--数组首地址问题小记
- 【Java】ArrayList<String>转化为String数组问题
- Android:关于Android Studio连接手机的各种问题 & 解决“通常每个套接字地址(协议/网络地址/端口)只允许使用一次(10048)”的问题。
- 一个关于"int型二维数组"及"指针数组"作函参的地址传递和带回返回值的问题,指针的拓展练习〈二〉
- C语言 复杂指针的申明问题 数组指针 指针数组 函数指针 指针函数一览无遗! C/C++求职面试必备考点(四)
- C语言数组初始化问题
- (转)数组名、数组名取地址以及作为函数传递带来的问题
- c语言中数组名代表数组首地址,它的值在运行期间可以改变吗?
- 10月 5日 c语言 一维数组 处理Fibonacci 数列问题
- c语言 数组名&&结构体名 为什么不能用数组名给数组赋值,结构体却可以
- C语言sizeof(),条件运算符?:,取地址运算符&变量名
- 一个看似简单的数组地址问题