• C语言---二维数组&&指针


    1.int a[3][4] = {0};

    ----------------------------------------
    printf("%d\n",sizeof(a));

    12元素,12*4=48字节;

    -------------------------------------
    printf("%d\n",sizeof(a[0][0]));

    一个元素,4字节;

    ------------------------------------
    printf("%d\n",sizeof(a[0]));

    a[0]是第一行数组的数组名,第一行的大小,4元素,4*4=16字节;

    ---------------------------------------------
    printf("%d\n",sizeof(a[0]+1));

    第1行的第2个元素地址,4/8字节;

    ----------------------------------------------
    printf("%d\n",sizeof(*(a[0]+1)));

    表示第1行的第2个元素,整形4字节;

    ------------------------------------------------
    printf("%d\n",sizeof(a+1));

    跳过一行,指向第二行,指向第二行首个元素地址,是4/8;

    ---------------------------------------------
    printf("%d\n",sizeof(*(a+1)));

    等价于a[1],即第二行数组名,放在sizeof里面求第二行数组大小,16字节;

    第二行地址,数组指针解引用,计算第二行数组大小;

    -----------------------------------------------------------
    printf("%d\n",sizeof(&a[0]+1));

    第一行地址加上1表示第2行地址,4/8字节;

    --------------------------------------------------------
    printf("%d\n",sizeof(*(&a[0]+1)));

    第二行大小,4元素,16字节;

    ----------------------------------------------------------
    printf("%d\n",sizeof(*a));

    a是第1行的地址,解引用是第一行的大小,16字节;

    *a--->*(a+0)-->a[0]也可以理解;

    ------------------------------------------------------------
    printf("%d\n",sizeof(a[3]));

    越界的,大小16字节,和a[0],a[1]的类型是相同的,不会访问内存,只关注类型;

    类如:

    b+2=6short类型赋值给a的int类型,结果就是类型,大小是4;

    a并没有被复赋值,还是2,因为sizeof里面的内容不会真正的执行,编译的时候就已经确定了;

  • 相关阅读:
    Android Studio实现一个点餐系统
    借助 DevChat AI 之力,成就我之全栈梦想
    ARINC825规范简介
    区块链技术与应用 - 学习笔记3【比特币数据结构】
    学会解决问题的方法
    URL和URI的区别
    数字验证学习笔记——UVM学习3 核心基类
    d重载操作符
    一个分号将会导致SVG的animate动画失效,你知道吗?
    1626C - Monsters And Spells ,D - Carry Bit 组合数学
  • 原文地址:https://blog.csdn.net/binhyun/article/details/136193182