• 一维数组笔试题及其解析


    Lei宝啊 :个人主页

    愿所有美好不期而遇



    前言:

    数组名在寻常情况下表示首元素地址,但有两种情况例外:

    1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小

    2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址 

    3.sizeof是操作符,不是函数,并且sizeof不计算括号里的表达式,他会在编译阶段检查括号里的表达式的类型属性,计算出大小。(任何表达式都有两种属性,值属性和类型属性,

    int a = 3; short b = 2; b = a + b;这个表达式的值属性就是5,类型属性就是short)

    前言很重要,记住哦~ 

    笔试题(一维数组)

        int a[] = { 1,2,3,4 };
    printf("%d\n", sizeof(a));
        printf("%d\n", sizeof(a+0));
     printf("%d\n", sizeof(*a));
        printf("%d\n", sizeof(a+1));
        printf("%d\n", sizeof(a[1]));
      printf("%d\n", sizeof(&a));
        printf("%d\n", sizeof(*&a));
          printf("%d\n", sizeof(&a+1));
          printf("%d\n", sizeof(&a[0]));
              printf("%d\n", sizeof(&a[0]+1));

    先自己做再看答案和解析哦~ 

    答案 

    16

    8

    4

    8

    4

    8

    16

    8

    8

     8 

    (博主用的是64位机器,所以地址占的空间大小为8字节) 

    解析 

    1. int main()
    2. {
    3. int a[] = { 1,2,3,4 };
    4. printf("%d\n", sizeof(a));
    5. //sizeof里只有数组名,计算的是整个数组的大小,16个字节
    6. printf("%d\n", sizeof(a+0));
    7. //这里并不是单独的数组名,也许你看着加0之后还是a,但此时的
    8. //数组名意义已经变成了首元素地址,所以为4/8,(看机器位数)
    9. printf("%d\n", sizeof(*a));
    10. //首元素为int类型,4个字节
    11. printf("%d\n", sizeof(a+1));
    12. //这个和a+0是一个道理,指向第二个元素,是地址,4/8
    13. printf("%d\n", sizeof(a[1]));
    14. //第二个元素,int类型,4个字节
    15. printf("%d\n", sizeof(&a));
    16. //&a,指针类型int (*) [4],但还是指针,4/8
    17. printf("%d\n", sizeof(*&a));
    18. //这个有两种理解方式:
    19. //1.&a后再解引用还是a,也就是说还是只有a,所以计算整个数组大小
    20. //2.&a的指针类型是int (*) [4],是数组指针,解引用访问的是
    21. // int [4],是整个数组,16个字节,这就类似于int* 解引用后访问的是
    22. // int类型的数据,4个字节,char* 解引用后访问一个字节的数据。
    23. printf("%d\n", sizeof(&a+1));
    24. //数组指针加1,和我们的数组其实已经没有关系了,这里加1的是这个指针
    25. //,所以4/8
    26. printf("%d\n", sizeof(&a[0]));
    27. //首元素的地址,4/8
    28. printf("%d\n", sizeof(&a[0]+1));
    29. //第二个元素的地址,4/8
    30. return 0;
    31. }


  • 相关阅读:
    【云原生】Kubernetes PDB(Pod Disruption Budget)介绍与简单使用
    C++算法入门练习——树的带权路径长度
    Alien Skin Exposure2024免费版图片颜色滤镜插件
    【C++初阶】日期类实现、const成员函数、取地址及const取地址操作符重载
    Shell test 命令
    Spring 6.X IoC 容器
    【Python】发布一个简单好用的日志记录器bestlog
    应用安全系列之三十七:日志注入
    动态规划(子序列问题)
    cmu中间代码groud_based_autonomy_basic在适配不同机器人时主要修改的参数
  • 原文地址:https://blog.csdn.net/m0_74824254/article/details/132014894