关于c语言指针的一丢丢感悟

今天在c语言书上看到了一个题,是这样的:

include <stdio.h>

int main()
{
int k=2,m=4,n=6;
int p1=&k,p2=&m,p3=&n;
p1=p3;
p3=p1;
if(p1==p3)
p1=p2;
printf("p1=%d,p2=%d,p3=%d\n",p1,
p2,p3);
return 0;
}
这样的输出结果是这样的:
p1=6,p2=4,p3=6;

这使百思不得其解,p2,p3 中存的不就是m,n的地址吗,为什么会不相等尼,于是我用gdb调试了一下,结果:

(gdb) p &m
$7 = (int *) 0x7fffffffdb38
(gdb) p &n
$8 = (int *) 0x7fffffffdb3c
(gdb) p &k
$9 = (int *) 0x7fffffffdb34
(gdb) p p1
$10 = (int *) 0x7fffffffdb34
(gdb) p p2
$11 = (int *) 0x7fffffffdb38
(gdb) p p3
$12 = (int *) 0x7fffffffdb3c
(gdb)

哦,原来是这样的,刚开始的时候已经给他们分配好了各自的地址,而执行的p1=p3;并没有改变p1,p3中的内容,只是改变了p1,p3所指向的变量m,n所在存储单元中的值,p1,p3中存的依旧是原来刚分配的地址。所以p1!=p3.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我是办公室的迟到大户,赞助罚金总交得最多。 我妈气不过,经常嘱咐我,早点睡早点睡。 我不信,坚定的辩驳,我哪怕下班...
    张芮涵阅读 697评论 0 11
  • 题目要求 解决方法 选择Analyze - Descriptive Statistics - Frequenci...
    Co_zy阅读 938评论 0 1
  • 新学期第一天上班,听到一则骇人耸听的消息:同事小徐的侄儿浩然跳楼了! 所有的同事都不敢相信这是真的,经常会从手机里...
    舒圆阅读 341评论 0 3
  • 世界上如果真的有一片海一直留在我内心深处 我想那一定是巴厘岛的海吧 因为实现了我的第一次出国的小梦想 因为先生尽最...
    peipeirong阅读 546评论 5 2