[讨论] 我认为这才是真正的在函数内访问数组参数的方式,大家认为呢

碎炎 2012-04-27 04:08:41

void func(int (*p) [3])
{
printf("%d\n",sizeof(*p));
(*p)[2]=999; //*p即为int[3]的复合类型引用的内存
}

int main()
{
int a[3]={0};
func(&a); //取复合结构的地址
printf("%d",a[2]);
return 0;
}


这个就完全的与同为复合类型的结构体联系在一起了,int[3]就是普普通通的一个和结构体一样的类型,[]就是和.一样的访问元素的操作符。当然数组名的直接退化有时候是方便一点。
...全文
176 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
碎炎 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

movl (%edx,%ecx,4) %eax
%edx为要访问的数组 %ecx为要访问的元素在数组中的位置
(int a[10]; 要访问a[1]即置%ecx为1 而int a[10][10]; 要访问a[2][3]即置%ecx为2*10+3=23)
4为数组元素占的内存大小 即sizeof(T) 如果T为int 即为4 为编译器确定 大概就是这样
[/Quote]

嗯 寻址方式我在我的文章里写过了 我在这里讨论下所谓的语法规则 对于同为复合结构的数组的特殊性
xialeijie368 2012-04-27
  • 打赏
  • 举报
回复
%edx为要访问的数组的地址[Quote=引用 5 楼 的回复:]

movl (%edx,%ecx,4) %eax
%edx为要访问的数组 %ecx为要访问的元素在数组中的位置
(int a[10]; 要访问a[1]即置%ecx为1 而int a[10][10]; 要访问a[2][3]即置%ecx为2*10+3=23)
4为数组元素占的内存大小 即sizeof(T) 如果T为int 即为4 为编译器确定 大概就是这样
[/Quote]
wjb_yd 2012-04-27
  • 打赏
  • 举报
回复
说的没错,但是C/C++就是这样的。
xialeijie368 2012-04-27
  • 打赏
  • 举报
回复
movl (%edx,%ecx,4) %eax
%edx为要访问的数组 %ecx为要访问的元素在数组中的位置
(int a[10]; 要访问a[1]即置%ecx为1 而int a[10][10]; 要访问a[2][3]即置%ecx为2*10+3=23)
4为数组元素占的内存大小 即sizeof(T) 如果T为int 即为4 为编译器确定 大概就是这样
碎炎 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

不告诉你
[/Quote]

碎炎 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

对,就是这样.
不过c++了.何必这样呢?
如下:
void func(int (&p)[3])
{
printf("%d\n",sizeof(*p));
p[2]=999; //*p即为int[3]的复合类型引用的内存
}
[/Quote]

这点小差别就不用计较了。。
iamnobody 2012-04-27
  • 打赏
  • 举报
回复
不告诉你
evencoming 2012-04-27
  • 打赏
  • 举报
回复
对,就是这样.
不过c++了.何必这样呢?
如下:
void func(int (&p)[3])
{
printf("%d\n",sizeof(*p));
p[2]=999; //*p即为int[3]的复合类型引用的内存
}

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧