下面的 C 语言等价吗?
差异仅在最后一行 ( AnyFunction) 中。
A
static void AnyFunction(unsigned char *array);
unsigned char array[32] = "";
AnyFunction(array);
Run Code Online (Sandbox Code Playgroud)
乙
static void AnyFunction(unsigned char *array);
unsigned char array[32] = "";
AnyFunction(*&array);
Run Code Online (Sandbox Code Playgroud)
C
static void AnyFunction(unsigned char *array);
unsigned char array[32] = "";
AnyFunction(&array[0]);
Run Code Online (Sandbox Code Playgroud)
如果其中任何一个是等效的,这同样适用于 C++ 吗?
请参阅上面的问题和代码示例。
最终的结果是相同的,尽管它们的实现方式略有不同。
在第一种情况下:
AnyFunction(array);
Run Code Online (Sandbox Code Playgroud)
array当传递给函数时,特别是从与函数期望的类型相匹配的unsigned char [32]类型,衰减为指向其第一个成员的指针。unsigned char *
在第二种情况下:
AnyFunction(*&array);
Run Code Online (Sandbox Code Playgroud)
array获取 的地址,给我们一个类型的表达式unsigned char (*)[32],即指向数组的指针,然后*运算符取消引用该指针,得到一个类型为 的数组的表达式unsigned char [32]。然后,与第一种情况一样,该数组衰减为指向其第一个元素的指针。
在最后一种情况下:
AnyFunction(&array[0]);
Run Code Online (Sandbox Code Playgroud)
数组索引运算符为我们提供了一个左值,它是数组的第一个元素,该&运算符为我们提供了该元素的地址,并将结果传递给函数。
在所有三种情况下,函数都会传递一个指向 的第一个元素的指针array。