zoukankan      html  css  js  c++  java
  • C语言中数组&取地址的问题

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

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

    • 第一条printf语句应该没有问题,就是 bfe2e100
    • 第二条printf语句你可能会以为是bfe2e101。那就错了,a+1,编译器会编译成 a+ 1*sizeof(int),int在32位下是4字节,所以是加4,也就是bfe2e104
    • 第三条printf语句可能是你最头疼的,我们怎么知道a的地址?我不知道吗?可不就是bfe2e100。那岂不成了a==&a啦?这怎么可能?自己存自己的?也许很多人会觉得指针和数组是一回事,那么你就错了。如果是 int *a,那么没有问题,因为a是指针,所以 &a 是指针的地址,a 和 &a不一样。但是这是数组啊a[],所以&a其实是被编译成了 &a[0]。
    • 第四条printf语句就很自然了,就是bfe2e104。还是不对,因为是&a是数组,被看成int(*)[5],所以sizeof(a)是5,也就是5*sizeof(int),也就是bfe2e114。
  • 相关阅读:
    初识 vue
    Spring boot 整合 Swagger
    Swagger 注解
    初识 Swagger
    初识 mycat
    SpringBoot中的国际化
    为什么博客园用户体验这么差?
    Numpy常用方法及应用总汇
    嵌入式开发10种常见数字滤波算法
    .gitignore使用
  • 原文地址:https://www.cnblogs.com/StudipBird/p/3454967.html
Copyright © 2011-2022 走看看