gpt4 book ai didi

c++ - 为什么即使数组衰减为 POINTERS,也可以将函数的参数保留为 ARRAY?

转载 作者:太空狗 更新时间:2023-10-29 20:08:20 28 4
gpt4 key购买 nike

请原谅我的英语不好,

让我澄清一下,这是一个例子,

这是我们的主要内容:

 main()
{
int a1 []= {1,2,3,4,5,6,7,8,9} ;
int size = sizeof(a1) /sizeof(a1[0]) ;
point (a1 , size);

return 0 ;
}

这是函数:

void point(int a[] , int size)
{
int i ;
for (i = 0 ; i<size ; i++)
printf("%d\n", a[i])) ;
}

据我所知,当将数组作为参数传递给函数时,我们实际上是在将指向第一个元素的指针发送给数组。

话虽这么说,为什么函数“point”的参数是一个 ARRAY 变量,而不是一个 POINTER 变量...?

我认为这很奇怪的原因,所以例如在 main 中我们将 int* 传递给某个函数:

  int* a = &b ;
point2(a) ;

函数:

void point2 (int  a) // this would be invalid, it has to be int* a
{
.
.
}

我们必须指定该函数接收一个指针,数组如何成为异常?

请注意:我确实理解数组会衰减为指针;这就是为什么我的问题从来不是“为什么我们可以将数组作为参数发送给具有相同类型指针的函数?”。我的问题是,“为什么即使数组衰减为 POINTERS,也可以将函数的参数保留为 ARRAY?”。希望清楚这与第一个问题有何不同。谢谢!

最佳答案

C 和 C++ 的语言规范声明 T 类型数组的函数参数调整为指向 T 的类型指针。所以这些函数声明是一样的:

void foo(int a[42]);
void foo(int a[]);
void foo(int* a);

所有这些都将接受一个指针参数,无论它是否是数组衰减的结果。

关于c++ - 为什么即使数组衰减为 POINTERS,也可以将函数的参数保留为 ARRAY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54841310/

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