栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数组和结构体

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数组和结构体

一.数组

提出问题:

  • 为什么数组的第一个元素的索引要从0开始?
  • 多个局部变量的内存顺序是自下而上,还是自下而上分配的呢?
  • 为什么编译器要分配12个4字节的内存呢?

猜测1: 用违背常规的方法换来了计算速度
猜测2:跟实参的入栈方式一样,先声明的在上面

第i个元素的地址 = 首地址a + (i-1)×元素大小
第i个元素的地址 = 首地址a + i×元素大小

实证1:
C++代码

int main()
{
    int arr[10]{0};
    for (int i = 0; i < 10; i++) {
        arr[i] = i;
    }
}

汇编代码

003C1048 8B 55 D0             mov         edx,dword ptr [ebp-30h]  
003C104B 8B 45 D0             mov         eax,dword ptr [ebp-30h]  
003C104E 89 44 95 D4          mov         dword ptr [ebp+edx*4-2Ch],eax
实证2:先声明的先压栈,猜测2是错的

发现规律
  • C语言的数组在全局区,栈上都会分配连续的内存空间;而且索引从零开始;
  • 局部变量的内存布局是先声明的先压栈,这个需要日后再去深入修改验证;
一.结构体
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1025756.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号