C中将数组和数组指针传递到函数中的区别这两个函数在C中有什么区别?void f1(double a[]) {
//...}void f2(double *a) {
//...}如果我要调用一个相当长的数组上的函数,这两个函数的行为会有所不同吗?它们在堆栈上会占用更多的空间吗?
3 回答

繁花如伊
TA贡献2012条经验 获得超12个赞
6.7.5.3函数声明器(包括原型)
...7参数的声明为“数组。 类型“应调整为”限定指针到 类型‘,其中类型限定符(如果有的话)是在 [
和 ]
数组类型派生。如果关键字 static
也出现在 [
和 ]
对于数组类型派生,然后对于函数的每次调用,对应的实际参数的值应该提供对数组的第一个元素的访问,其元素至少与大小表达式指定的元素相同。
T a[]
T a[N]
T *a
.
6.3.2.1值、数组和函数指示符
...3除非是 sizeof
操作员或一元 &
运算符,或者是用于初始化数组的字符串文字,该表达式的类型为 类型“被转换为具有类型‘指针的表达式。 类型“指向数组对象的初始元素,而不是lvalue。如果数组对象具有寄存器存储类,则行为未定义。
int main(void){ int arr[10]; foo(arr); ...}
foo
arr
sizeof
&
int
int
foo
foo
void foo(int a[]) // or int a[10]{ ...}
void foo(int *a){ ...}
void foo(int a[static 10]){ ...}
a

守着一只汪
TA贡献1872条经验 获得超3个赞
#include <stdio.h>void function(int* array) { int a =5;}void main() { int array[]={2,4}; function(array); getch();}
push ebp mov ebp, esp sub esp, 18hand esp, 0FFFFFFF0hmov eax, 0add eax, 0Fhadd eax, 0Fhshr eax, 4shl eax, 4mov [ebp+var_C], eax mov eax, [ebp+var_C]call sub_401730 call sub_4013D0 mov [ebp+var_8], 2mov [ebp+var_4], 4lea eax, [ebp+var_8]mov [esp+18h+var_18], eax call sub_401290 call _getch leave retn
- 3 回答
- 0 关注
- 773 浏览
添加回答
举报
0/150
提交
取消