C for ios ---数组内存分析

数组的内存分配

1.数组内部存储细节

  • 存储方式:

    • 1)计算机会给数组分配一块连续的存储空间
    • 2)数组名代表数组的首地址,从首地址位置,依次存入数组的第1个、第2个….、第n个元素
    • 3)每个元素占用相同的字节数(取决于数组类型)
    • 4)并且数组中元素之间的地址是连续。
  • 示例

~~ 模拟该数组的内存存储细节如下: int x[2]={1,2};
~~ int ca[5]={'a','A','B','C','D'};
  • 注意:字符在内存中是以对应ASCII值的二进制形式存储的,而非上表的形式。 在这个例子中,数组x的地址为它的首元素的地址0x08,数组ca的地址为0x03。

2.数组的地址

  • 在内存中,内存从大到小进行寻址,为数组分配了存储空间后,数组的元素自然的从上往下排列 存储,整个数组的地址为首元素的地址。
  • 数组a的地址是ffc1,a[0]的地址是ffc1,a[1]的地址是ffc5
  • 因此a == &a[0],即第一个元素的地址就是整个数组的地址
    数组名就是数组的地址
&charValues = &charValues[0] = charValues

3.数组的越界问题

  • 数组越界导致的问题
    • 约错对象
    • 程序崩溃
  • 在使用数组的时候,一定不要访问不属于自己的内存空间
~~     char cs1[2] = {1, 2};
~~     char cs2[3] = {3, 4, 5};
~~     cs2[3] = 88; // 注意:这句访问到了不属于cs1的内存
~~     printf("cs1[0] = %d\n", cs1[0] );
~~ 输出结果: 88
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值