e******e 发帖数: 458 | 1 1. func(int (&array)[3][4]);
2. func(int (*array)[3][4]);
3. func(int array[3][4]);
这几个函数是等价的吗?有什么区别吗?
特别是array[3][4]到底是传的指针,还是说在在传给func的时候,已经在heap或者
stack上分配了size(int)*3*4的空间了?
谢谢。 | X****r 发帖数: 3557 | 2 这几个函数各不相同。1的参数是对3x4的二维int数组的引用,2的参数是
指向3x4的二维int数组的指针,而3的参数是对长度为4的一维数组的指针,
因为函数形参出现T[]类型的时候会作为T*来处理。见C++ 2003 8.3.5
3. ... After determining the type of each parameter,
any parameter of type “array of T” or “function
returning T” is adjusted to be “pointer to T” or
“pointer to function returning T,” respectively.
比如
void func1(int (&array)[3][4]) {}
void func2(int (*array)[3][4]) {}
void func3(int array[3][4]) {}
int main() {
int array[3][4];
func1(array);
func2(&array);
func3(array);
int array2[2][4];
// func1(array2) or func2(&array2) wouldn't compile
func3(array2);
}
【在 e******e 的大作中提到】 : 1. func(int (&array)[3][4]); : 2. func(int (*array)[3][4]); : 3. func(int array[3][4]); : 这几个函数是等价的吗?有什么区别吗? : 特别是array[3][4]到底是传的指针,还是说在在传给func的时候,已经在heap或者 : stack上分配了size(int)*3*4的空间了? : 谢谢。
|
|