首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-10-16 
[讨论] 我认为这才是真正的在函数内访问数组参数的方式,大家认为呢C/C++ codevoid func(int (*p) [3]){pri

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

C/C++ code
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]就是普普通通的一个和结构体一样的类型,[]就是和.一样的访问元素的操作符。当然数组名的直接退化有时候是方便一点。

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

[解决办法]
不告诉你
[解决办法]
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 为编译器确定 大概就是这样
[解决办法]
说的没错,但是C/C++就是这样的。
[解决办法]
%edx为要访问的数组的地址
探讨

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 为编译器确定 大概就是这样

热点排行