码迷,mamicode.com
首页 > 编程语言 > 详细

关于c语言的一点点感悟

时间:2016-11-24 06:46:09      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:include   调试   c语言   改变   今天   printf   输出   gdb   gdb调试   

今天在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.

关于c语言的一点点感悟

标签:include   调试   c语言   改变   今天   printf   输出   gdb   gdb调试   

原文地址:http://www.cnblogs.com/future-liu1121/p/6095651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!