zoukankan      html  css  js  c++  java
  • 关于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 ",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.

  • 相关阅读:
    Ensp模拟OSPF与ACL综合应用
    ENSP配置NAT
    Ensp配置RSTP
    EnspOSPF单区域配置
    Ensp配置静态路由和默认路由
    NotPron国外版
    MSF
    转换流
    梦之光芒1-14关通关秘籍
    php序列化与反序列化
  • 原文地址:https://www.cnblogs.com/future-liu1121/p/6095651.html
Copyright © 2011-2022 走看看