【问题标题】:Memory address of a memory address in a machine? (C language)机器中内存地址的内存地址? (C语言)
【发布时间】:2011-10-10 06:29:00
【问题描述】:

今天出于好奇,我尝试了一些非常奇怪的东西:

代码:

int num = 2;
int * point = #

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


问题:

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

2) 稍后,我只是尝试修改代码(上面的代码),看看它会给出什么行为,即使用printf() 打印出指针point 的地址,而不是打印出地址存储在指针point中,这是变量num的地址。

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



感谢您花时间阅读本文。

【问题讨论】:

    标签: c pointers memory-address


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
      |----------|                             
      |   point  |                            
      |          |  1000                       
      |   2000   |                             
      |----------|                           
            |        
            |
            |
            |
            -------------------->|----------|
                                 |   num    |
                                 |          |  2000
                                 |    2     |     
                                 |----------|
      

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

      【讨论】:

        【解决方案3】:

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

        这不是关于 C 语言,而是关于计算机的工作原理。

        【讨论】:

          猜你喜欢
          • 2018-10-22
          • 1970-01-01
          • 2015-05-22
          • 1970-01-01
          • 1970-01-01
          • 2013-05-11
          • 1970-01-01
          • 2012-10-19
          • 1970-01-01
          相关资源
          最近更新 更多