以下在 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++ 吗?
请参阅上面示例的问题和代码。
最终结果是相同的,尽管它们的实现方式略有不同。
第一种情况:
AnyFunction(array);
当传递给函数时,array
衰减为指向其第一个成员的指针,特别是从类型 unsigned char [32]
到与函数期望的匹配的 unsigned char *
。
第二种情况:
AnyFunction(*&array);
获取
array
的地址,给我们一个 unsigned char (*)[32]
类型的表达式,即指向数组的指针,然后 *
运算符取消引用该指针,得到一个类型为 unsigned char [32]
的数组表达式。然后,与第一种情况一样,该数组衰减为指向其第一个元素的指针。
最后一种情况:
AnyFunction(&array[0]);
数组索引运算符为我们提供了一个左值,它是数组的第一个元素,
&
运算符为我们提供了该元素的地址,并将结果传递给函数。
在所有三种情况下,函数都会传递一个指向
array
第一个元素的指针。