多维数组、指针、类型转换(一)

本文深入探讨C语言中的多维数组,包括初始化和寻址,以及数组与指针的关系。通过汇编语言的视角,解释了数组在内存中的存储方式,同时讨论了类型转换对数组的影响,特别是初始化和赋值过程中的细节。
摘要由CSDN通过智能技术生成

多维数组、指针、类型转换(一)

1.多维数组的初始化与寻址
所谓多维数组,不过只是连续的内存空间。
了解了这个问题之后,我们就可以走进底层世界,一窥数组的奥妙。
(1)初始化
下面的代码会有什么样的效果呢?
int a[2][6][3]={ 2,3,4,5,6,7,8,9,10 };
所谓效果,就是我们要在内存层面上,精确地了解每一个细节。
下面给出这句话的汇编语句:

01354D32 C7 85 68 FF FF FF 02 00 00 00 mov         dword ptr [ebp-98h],2  
01354D3C C7 85 6C FF FF FF 03 00 00 00 mov         dword ptr [ebp-94h],3  
01354D46 C7 85 70 FF FF FF 04 00 00 00 mov         dword ptr [ebp-90h],4  
01354D50 C7 85 74 FF FF FF 05 00 00 00 mov         dword ptr [ebp-8Ch],5  
01354D5A C7 85 78 FF FF FF 06 00 00 00 mov         dword ptr [ebp-88h],6  
01354D64 C7 85 7C FF FF FF 07 00 00 00 mov         dword ptr [ebp-84h],7  
01354D6E C7 45 80 08 00 00 00 mov         dword ptr [ebp-80h],8  
01354D75 C7 45 84 09 00 00 00 mov         dword ptr [ebp-7Ch],9  
01354D7C C7 45 88 0A 00 00 00 mov         dword ptr [ebp-78h],0Ah  
01354D83 6A 6C                push        6Ch  
01354D85 6A 00                push        0  
01354D87 8D 45 8C             lea         eax,[ebp-74h]  
01354D8A 50                   push        eax  
01354D8B E8 65 C3 FF FF       call        _memset (013510F5h)  
01354D90 83 C4 0C             add         esp,0Ch  

ebp-98h,这是a的首地址。很显然,这些数字被连续地写入了内存中,即从epb-98h到epb-78h,每次写入4字节。执行到01354D83后,a的内存变化为:
执行后
那么后面的语句在做什么呢?熟悉C语言的朋友会知道,类似于这种形式的代码,正是C的默认调用惯例。也就是说,程序在调用函数。
调用何种函数呢?_memset.
程序将6c(108)和0压栈,之后将ebp-74h(正好是赋值结束后的地址)压栈,我们很有理由猜测,程序在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值