-
存储方式: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