gpt4 book ai didi

c - 为什么不能使用指针的指针作为参数来声明函数接收数组指针

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:17 25 4
gpt4 key购买 nike

我有一个 c 函数接收数组指针作为它的一个参数。

由于传递的数组实际上是其第一个元素的指针,所以数组的指针应该是指针的指针。

int arr[]={0,1,2,3};
int main(){
receiveArray(arr);
receiveArrayPtr(&arr);
}
int receiveArray(int *arrPara){....}
int receiveArrayPtr(int **arrPtrPara){....} //Why cannot do this?

错误信息是

"expected ‘int **’ but argument is of type ‘int ()[4]’
void receiveArrayPtr(int*
);"

想知道为什么

最佳答案

Since pass an array is actually the pointer of its first element, so the pointer of an array should be a pointer of pointer.

这不是它的工作原理。

除非它是 sizeof 的操作数或一元 &运算符,或者是用于在声明中初始化另一个数组的字符串文字,“T 的 N 元素数组”类型的表达式将转换为“指向 T 的指针”类型的表达式,表达式的值将是数组第一个元素的地址。

表达式的类型 arr在调用 receiveArray是“int 的 4 元素数组”。因为它不是 sizeof 的操作数或一元 &运算符,它被转换为 int * 类型的表达式,这是函数接收的内容。

在调用 receiveArrayPtr 时, 表达式 arr是一元操作数 &运算符,因此转换规则不适用;表达式的类型 &arr是“指向 int 的 4 元素数组的指针”,或 int (*)[4] .

这种转换称为数组名称衰减

关于c - 为什么不能使用指针的指针作为参数来声明函数接收数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24826967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com