This question already has answers here:
Closed 8 months ago.
What is array decaying?
(9个答案)
Is an array name a pointer?
(9个答案)
在我的主函数中有一个双数组:
double ary1D[4] = {1.1, 2.2, 3.3, 4.4};

并进行函数调用:
print1D_A(&ary1D[0],Num);

我的职能:
void print1D_A(double *ary1D, int Num);

所以我的问题是,&ary1D[0]和&ary1D之间的区别是什么。如果我用&ary1D调用函数,编译器会给我一个错误。但是参数&ary1D是数组的第一个地址,就像&ary1D[0]。
我可以更改函数的参数列表吗
print1D_A(&ary1D,Num);

最佳答案

表达式&ary1D[0]是指向ary1D的第一个元素的指针。它的类型是double*。这也是plainary1D衰变的原因,所以您可以

print1D_A(ary1D,Num);

表达式&ary1D是指向数组的指针。它的类型是double (*)[4]
现在,两个指针都指向同一个位置,但是正如您所看到的,它们的类型非常不同。如果一个函数需要一种类型,而您给出了另一种类型,则可能会导致错误。

09-04 18:10