int *p = NULL ,c , *q;
c=10;
p = &c;
q = p;
printf ("%d and %d ",&p, &q );
输出:
2686788 and 2686780
我的问题是:据我推测,我认为内存地址将是相同的,因为我已经将
p
分配到q
中。也许我错了。 最佳答案
p
和q
是两个不同的变量,它们的地址不同。&p
和&q
分别是p
和q
的地址。p
和q
的内容将相同,即它们在分配后包含相同的内存地址
q = p;
p
和q
现在都指向同一个内存位置。如图所示,这是在下面的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 );