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

printf ("%d and %d ",&p, &q );

输出:
2686788 and 2686780

我的问题是:据我推测,我认为内存地址将是相同的,因为我已经将p分配到q中。也许我错了。

最佳答案

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

q = p;

pq现在都指向同一个内存位置。如图所示,这是在下面的ascii艺术:
          p
      +-------+
      |       |                 c
0x200 | 0x100 +---------+   +-------+
      |       |         +-> |       |
      +-------+             |  10   |
          q             +-> |       |
      +-------+         |   +-------+
      |       |         |     0x100
0x300 | 0x100 +---------+
      |       |
      +-------+


        p = q but &p != &q

注意:要打印指针数据类型,请使用%p中的printf说明符。
 printf ("%p and %p ", (void *)&p, (void *)&q );

09-11 19:24
查看更多