zoukankan      html  css  js  c++  java
  • "深入理解C语言" 指针

      本文对coolshell中的"深入理解C语言"这篇文章中提到的指针问题, 进行简要的分析.

    #include <stdio.h>
    int main(void){
        int a[5];
        printf("%x
    ", a);
        printf("%x
    ", a + 1);
        printf("%x
    ", &a);
        printf("%x
    ", &a + 1);
        return 0;
    }

      假设a的地址是:0Xbfe2e100, 而且是32位机,那么这个程序会输出什么?

      #1: 第一条printf语句应该没有问题,就是 bfe2e100

      #2: 第二条printf语句你可能会以为是bfe2e101。那就错了,a+1,编译器会编译成 a+ 1*sizeof(int),int在32位下是4字节,所以是

      加4,也就是bfe2e104【a为指向int类型数据的指针】

      #3: 第三条printf语句可能是你最头疼的,我们怎么知道a的地址?我不知道吗?可不就是bfe2e100。那岂不成了a==&a啦?这怎么可

      能?自己存自己的?也许很多人会觉得指针和数组是一回事,那么你就错了如果是 int *a,因为a是指针,所以&a是指针的地址,a和

      &a一样但是这是数组啊a[],所以&a其实是被编译成了&a[0]。

      #4: 第四条printf语句就很自然了,就是bfe2e104。还是不对,因为是&a是数组,被看成int(*)[5],所以sizeof(a)是5,也就是

      5*sizeof(int),也就是bfe2e114【&a可以理解为指向int [5]类型的指针,即a为数组类型】 

    Reference:

    深入理解C语言: http://coolshell.cn/articles/5761.html

  • 相关阅读:
    Ranorex发布2.3版本支持Flex4
    TestComplete基础教程
    2009年缺陷跟踪和测试管理工具使用情况调查报告
    软件自动化测试资源列表
    TestComplete资源列表
    分治算法
    画表格蓝桥杯
    分红酒蓝桥杯
    “硬币方案”蓝桥杯
    微生物增值蓝桥杯
  • 原文地址:https://www.cnblogs.com/lxw0109/p/dive-into-C.html
Copyright © 2011-2022 走看看