这项任务后它的内存地址不一样吗?

Zah*_*ain 3 c pointers

int *p = NULL ,c , *q;
c=10;
p = &c;
q = p; 

printf ("%d and %d ",&p, &q );
Run Code Online (Sandbox Code Playgroud)

输出:

2686788 and 2686780
Run Code Online (Sandbox Code Playgroud)

我的问题是:据我以为,我以为内存地址将是一样的,因为我已经分配pq.可能是我错了.

hac*_*cks 15

p并且q是两个不同的变量,它们的地址不同.&p&q是的地址pq分别.
内容pq将是相同的,即它们将在赋值后包含相同的内存地址

q = p;      
Run Code Online (Sandbox Code Playgroud)

p并且q两者现在都指向相同的内存位置.至于插图,这在以下ASCII艺术中显示:

          p                          
      +-------+                      
      |       |                 c    
0x200 | 0x100 +---------+   +-------+
      |       |         +-> |       |
      +-------+             |  10   |
          q             +-> |       |
      +-------+         |   +-------+
      |       |         |     0x100  
0x300 | 0x100 +---------+            
      |       |                      
      +-------+                      


        p = q but &p != &q           
Run Code Online (Sandbox Code Playgroud)

注意:要打印指针数据类型使用%p说明符printf.

 printf ("%p and %p ", (void *)&p, (void *)&q );       
Run Code Online (Sandbox Code Playgroud)

  • 它应该是`printf("%p和%p",(void*)&p,(void*)&q)`,因为`%p`仅为`void`-pointers定义. (2认同)