0
点赞
收藏
分享

微信扫一扫

数组内部存储细节

蒸熟的土豆 2022-01-04 阅读 62
c#

  • 存储方式:didi

    • 1)内存寻址从大到小, 从高地址开辟一块连续没有被使用的内存给数组
    • 2)从分配的连续存储空间中, 地址小的位置开始给每个元素分配空间
    • 3)从每个元素分配的存储空间中, 地址最大的位置开始存储数据
    • 4)用数组名指向整个存储空间最小的地址
    • #include <stdio.h>
      int main()
      {
          int num = 9;
          char cs[] = {'l','n','j'};
          printf("cs = %p\n", &cs);       // cs = 0060FEA9
          printf("cs[0] = %p\n", &cs[0]); // cs[0] = 0060FEA9
          printf("cs[1] = %p\n", &cs[1]); // cs[1] = 0060FEAA
          printf("cs[2] = %p\n", &cs[2]); // cs[2] = 0060FEAB
      
          int nums[] = {2, 6};
          printf("nums = %p\n", &nums);      // nums = 0060FEA0
          printf("nums[0] = %p\n", &nums[0]);// nums[0] = 0060FEA0
          printf("nums[1] = %p\n", &nums[1]);// nums[1] = 0060FEA4
          
          return 0;
      }
      

       

    • 注意:字符在内存中是以对应ASCII码值的二进制形式存储的,而非上述的形式。
    • char cs1[2] = {1, 2};
          char cs2[3] = {3, 4, 5};
          cs2[3] = 88; // 注意:这句访问到了不属于cs1的内存
          printf("cs1[0] = %d\n", cs1[0] );
      输出结果: 88
      
      

      上面这个我的理解:地址顺序

    • cs1(1

    •         0)

    • cs2(2

    •        1

    •        0)

    • 此时赋值cs2[3]=88;

    • cs2最大下表是2;所以这个时候就会向上分配,相当于给cs1重新赋值。


    • 版权声明:本文为CSDN博主「极客江南」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
      原文链接:https://blog.csdn.net/weixin_44617968/article/details/117656810

举报

相关推荐

0 条评论