机器内存地址的内存地址? (C语言)
问题描述:
今天,出于好奇,我想的东西很奇怪:机器内存地址的内存地址? (C语言)
验证码:
int num = 2;
int * point = #
printf("%p\n" , &point);
问题:
1)我做的第一件事是我追加变量num
的地址到指针point
,之后我用printf()
打印出指针point
中的地址存储区。
2)后来,我只是尝试修改代码(上面的代码),看看它会给出什么样的行为,这是由指针使用printf()
打印出指针point
的地址,而不是打印出来的地址,商店point
这是变量num
的地址。
3)尽管地址与变量num
的地址不同,只是想知道这个行为在C标准中是否定义好了,它仍然会打印出地址吗?为什么指针也有自己的地址,我认为它的工作是存储其他可变地址。
谢谢你花时间阅读本。
答
指针只是另一个变量,因此也需要一个生活的地方。
答
计算机中的所有内容都是“1”和“0”。就像一个int变量在某个特定的内存位置只是一个零值一样,一个指针也就是这样。不同之处在于您的程序如何决定威胁该内存单元的内容。如果你声明一个指针,它将使用存储器单元来存储一些数据的地址,但存储器所在的存储器单元也必须有一个地址,就像其他的一样。
这不是关于C语言,而是关于计算机如何工作。
答
|----------|
| point |
| | 1000
| 2000 |
|----------|
|
|
|
|
-------------------->|----------|
| num |
| | 2000
| 2 |
|----------|
指针point
本身也是一个变量,它需要内存中的一些空间驻留在。如上所示,它在内存中指向/存储num
的存储位置(2000
),但是对于point
存在,它本身需要一个单独的存储位置(1000
)。
我爱图片! –