[讨论] 小弟我认为这才是真正的在函数内访问数组参数的方式,大家认为呢
[讨论] 我认为这才是真正的在函数内访问数组参数的方式,大家认为呢
这个就完全的与同为复合类型的结构体联系在一起了,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为要访问的数组的地址
- 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为要访问的数组的地址