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

[讨论] 我认为这才是真正的在函数内访问数组参数的方式,大家认为呢
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 为编译器确定 大概就是这样