数组作为函数形参会退化为指针变量 void sort_array(int a[10]); void sort_array(int a[10]); void sort_array(int *a); //以上三种形参是等价的,数组的方括号在函数的形参中是无意义的,但是void sort_array...
数组作为函数形参会退化为指针变量
void sort_array(int a[10]); void sort_array(int a[10]); void sort_array(int *a); //以上三种形参是等价的,数组的方括号在函数的形参中是无意义的,但是void sort_array(int a[0]);会报错,因为方括号中不能为0
再举个例子说明:
从图中的代码可以看出,j并不为数组元素的个数。二是在64位系统中,j=2,在32位系统中,j为1。
因为整型变量在C语言中占4个字节,64为系统地址为64为,则指针变量占8个字节,同理,32为系统中指针变量占4个字节。从上述代码就可以看出,函数形参中的a已经退化为指针变量。
当二维数组作为函数形参时,能作为函数实参的是二维数组,数组指针 d.当指针数组作为函数形参时,能作为函数实参的是指针数组,二级指针,一级指针的地址 实例验证: #include#includ...
传参规则:
a.当二级指针作为函数形参时,能作为函数实参的是二级指针,指针数组,一级指针的地址
b.当数组指针作为函数形参时,能作为函数实参的是二维数组,数组指针
c.当二维数组作为函数形参时,能作为函数实参的是二维数组,数组指针
d.当指针数组作为函数形参时,能作为函数实参的是指针数组,二级指针,一级指针的地址
实例验证:#include#includevoidfun1(int**pp){printf("fun1\n");}voidfun2(int(*a_p)[5]){printf("fun2\n");}voidfun3(int t_d_a[][5]){printf("fun3\n");}voidfun4(int*p_a[5]){printf("fun4\n");}intmain(){int*p_a[5];//指针数组int**pp=NULL;//二级指针int*p=NULL