VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 19862|回复: 10

[已解决]关于数组作参数传入函数的问题

[复制链接]
77_avatar_middle
最佳答案
0 
在线会员 发表于 2020-1-9 17:28:01 | 显示全部楼层 |阅读模式
本帖最后由 wl1383838438 于 2020-1-9 18:06 编辑

把int类型数组作为参数传入函数,在函数内调用sizeof(),和在main里直接用sizeof(),得出的结果不相同。程序和运行结果上传图。
初学者不了解这是什么原因。
最佳答案
15_avatar_small
2020-1-9 21:09:20
函数传数组参数时自动退化为指针,32位所以占用4字节!
push参数时是数组的首个元素的地址

程序和运行结果

程序和运行结果




上一篇:求教SYC大大,换肤第二课,关于动态换肤的疑问
下一篇:运行程序时这个错误不知道怎么解决了
75_avatar_middle
最佳答案
20 
online_supermod 发表于 2020-1-9 18:18:44 | 显示全部楼层

关于数组作参数传入函数的问题
关于数组作参数传入函数的问题




1步  将你的数组移动进ebp也就是数组中的容器中,  内存是有编号的,
2,再你调用的sizeof(in)将1ch移动到a的地址处,
   3是取出in_size(in)的有效地址偏移,
3将前面取出的有效值背调用,跳转到该函数的地址也就是你的那个数组函数,第五步是将第三部的eax移动到B,这也就是为啥b等于4
,而a会等于20的原因
  你把
int in[] = { 1,2,3,4,5 };这行多加几个数字你会发现 他们都是按X4的规则,不管几个数 都会乘以4!


我也不知道我分析你能不能懂 或许是我分析的不到位
15_avatar_middle
最佳答案
6 
online_vip 发表于 2020-1-9 21:09:20 | 显示全部楼层    本楼为最佳答案   
bestAnswer
函数传数组参数时自动退化为指针,32位所以占用4字节!
push参数时是数组的首个元素的地址
46_avatar_middle
最佳答案
0 
在线会员 发表于 2020-1-9 22:11:17 | 显示全部楼层
建议你看一下形参和实参的区别.
58_avatar_middle
最佳答案
50 
online_vip 发表于 2020-1-9 17:49:21 | 显示全部楼层
我猜/.../ In是数组,in是指针,呵呵。
06_avatar_middle
最佳答案
0 
在线会员 发表于 2020-1-9 19:10:46 | 显示全部楼层
数组名即数组首地址
77_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-9 23:05:00 | 显示全部楼层
jadeshu 发表于 2020-1-9 21:09
函数传数组参数时自动退化为指针,32位所以占用4字节!
push参数时是数组的首个元素的地址

谢谢大佬解答! 我用char、double数组去试了下,结果都是4。函数返回的是指针占用字节。
77_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-9 23:08:06 | 显示全部楼层
thzzl 发表于 2020-1-9 17:49
我猜/.../ In是数组,in是指针,呵呵。

你怎么猜得这么准哈哈关于数组作参数传入函数的问题
58_avatar_middle
最佳答案
50 
online_vip 发表于 2020-1-9 23:09:43 | 显示全部楼层
mmggg 发表于 2020-1-9 23:08
你怎么猜得这么准哈哈

因为vs默认是32位程序,一般练习型程序懒的切换成64位,指针占4个字节。
77_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-9 23:19:20 | 显示全部楼层
wl1383838438 发表于 2020-1-9 18:18
1步  将你的数组移动进ebp也就是数组中的容器中,  内存是有编号的,
2,再你调用的sizeof( ...

谢谢大佬解答!分析的很详细!
初学者的我功力不够深厚只有基础概念关于数组作参数传入函数的问题,还要向大佬多多学习。
75_avatar_middle
最佳答案
20 
online_supermod 发表于 2020-1-9 23:38:30 | 显示全部楼层
mmggg 发表于 2020-1-9 23:19
谢谢大佬解答!分析的很详细!
初学者的我功力不够深厚只有基础概念,还要向大佬多多学习。

我也还是个学生关于数组作参数传入函数的问题
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-4-23 05:16

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表