传递参数:C、C++中数组与*&array、&array[0]的区别

问题描述 投票:0回答:1

以下在 C 语言中是否等价?

差异仅在最后一行(

AnyFunction
)。

A

static void AnyFunction(unsigned char *array);
unsigned char array[32] = "";

AnyFunction(array);

B

static void AnyFunction(unsigned char *array);
unsigned char array[32] = "";

AnyFunction(*&array);

C

static void AnyFunction(unsigned char *array);
unsigned char array[32] = "";

AnyFunction(&array[0]);

如果其中任何一个是等效的,这同样适用于 C++ 吗?

请参阅上面示例的问题和代码。

c++ c pointers
1个回答
0
投票

最终结果是相同的,尽管它们的实现方式略有不同。

第一种情况:

AnyFunction(array);
当传递给函数时,

array
衰减为指向其第一个成员的指针,特别是从类型
unsigned char [32]
到与函数期望的匹配的
unsigned char *

第二种情况:

AnyFunction(*&array);

获取

array
的地址,给我们一个
unsigned char (*)[32]
类型的表达式,即指向数组的指针,然后
*
运算符取消引用该指针,得到一个类型为
unsigned char [32]
的数组表达式。然后,与第一种情况一样,该数组衰减为指向其第一个元素的指针。

最后一种情况:

AnyFunction(&array[0]);

数组索引运算符为我们提供了一个左值,它是数组的第一个元素,

&
运算符为我们提供了该元素的地址,并将结果传递给函数。

在所有三种情况下,函数都会传递一个指向

array
第一个元素的指针。

© www.soinside.com 2019 - 2024. All rights reserved.