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)
我的问题是:据我以为,我以为内存地址将是一样的,因为我已经分配p到q.可能是我错了.
hac*_*cks 15
p并且q是两个不同的变量,它们的地址不同.&p和&q是的地址p和q分别.
内容p和q将是相同的,即它们将在赋值后包含相同的内存地址
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)