#include <iostream>
void arrayFunctionA(int* p)
{
}
int main()
{
int a[3] = {7, 7, 7};
arrayFunctionA(a);
arrayFunctionA(&a[0]);
arrayFunctionA(&a);
return 0;
}
这将无法编译,并出现错误arrayFunctionA(&a);
.
So, a
and &a[0]
评估为int*
, but &a
才不是。
这3个有什么区别?
a
是一个 3 的数组int
type (int [3]
).
固定数组衰减为指向其第一个元素的指针,因此arrayFunctionA(a)
, a
将腐烂成int*
指向它的第一个元素的指针。
&a[0]
是数组第一个元素的地址,类型为int *
.
&a
是数组本身的地址,类型为int (*)[3]
(指向 3 个数组的指针int
).
所以,对于带有签名的函数
void arrayFunctionA(int* p);
Passing a
or &a[0]
将达到相同的目的,同时通过&a
将导致传递的参数值与函数参数之间不兼容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)