2011-10-10 85 views
1

今天,出于好奇,我想的东西很奇怪:机器内存地址的内存地址? (C语言)

验证码:

int num = 2; 
int * point = # 

printf("%p\n" , &point); 


问题:

1)我做的第一件事是我追加变量num的地址到指针point,之后我用printf()打印出指针point中的地址存储区。

2)后来,我只是尝试修改代码(上面的代码),看看它会给出什么样的行为,这是由指针使用printf()打印出指针point的地址,而不是打印出来的地址,商店point这是变量num的地址。

3)尽管地址与变量num的地址不同,只是想知道这个行为在C标准中是否定义好了,它仍然会打印出地址吗?为什么指针也有自己的地址,我认为它的工作是存储其他可变地址。



谢谢你花时间阅读本。

回答

7

指针只是另一个变量,因此也需要一个生活的地方。

1

计算机中的所有内容都是“1”和“0”。就像一个int变量在某个特定的内存位置只是一个零值一样,一个指针也就是这样。不同之处在于您的程序如何决定威胁该内存单元的内容。如果你声明一个指针,它将使用存储器单元来存储一些数据的地址,但存储器所在的存储器单元也必须有一个地址,就像其他的一样。

这不是关于C语言,而是关于计算机如何工作。

5
|----------|        
| point |        
|   | 1000      
| 2000 |        
|----------|       
     |   
     | 
     | 
     | 
     -------------------->|----------| 
          | num | 
          |   | 2000 
          | 2  |  
          |----------| 

指针point本身也是一个变量,它需要内存中的一些空间驻留在。如上所示,它在内存中指向/存储num的存储位置(2000),但是对于point存在,它本身需要一个单独的存储位置(1000)。

+0

我爱图片! –