gpt4 book ai didi

c++ - 将数组的地址传递给 C++ 中的函数

转载 作者:行者123 更新时间:2023-12-01 22:58:47 26 4
gpt4 key购买 nike

我是 C++ 的新手,我对将指针数组传递给函数的想法感到困惑。

这是函数

void func(int *a){ a[0]=999;}

主要使用

int main()
{
int a[5]={1,2,3,4,5};
func(a);
std::cout << a[0]<< std::endl;
}

我理解这非常有效,因为数组的名称只是其第一个元素的地址。根据我的理解,&a指的是整个数组的地址,而a指的是数组第一个元素的地址,应该和一致&a。但是,如果我使用

int main(){
int a[5]={1,2,3,4,5};
func(&a);
cout<< a[0]<< endl;
}

它返回编译器错误:第一个参数没有从“int (*)[10]”到“int *”的已知转换;删除 &

谁能解释一下这是怎么回事?

最佳答案

案例一

I understand this works perfectly as the name of an array is just the address of its first element.

上述说法在技术上是不正确的。第一个示例之所以有效,是因为在许多情况下(包括将数组作为参数按值传递给函数时)由于类型衰减,数组衰减指向其第一个元素的指针>。这意味着,在示例 1 中,当您将 a 作为参数传递时,存在一个隐式数组到指针的转换,它将您的数组 a 转换为 int 类型[5] 指向其第一个元素的指针,类型为 int*。因此在示例1中,参数的类型和参数的类型匹配,示例1成功。

另请注意,即使衰减指针和数组地址都具有相同的值,它们的类型也不同。衰减指针的类型为 int*&a 的类型为 int (*)[5]

案例2

Could anyone please explain what's going on here?

这是因为 aint [5] 类型,这意味着 &aint (*)[5 ] 与参数 int* 的类型不匹配。

也就是说,当你修改你的代码时,你传递的是 &a,它是 int (*)[5] 类型,但函数参数是 类型>int* ,因此参数类型与您传递的参数不匹配,因为没有从 int (*)[5] 到的隐式转换int* 我们得到提到的错误:

no known conversion from 'int (*)[5]' to 'int *'

关于c++ - 将数组的地址传递给 C++ 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72406614/

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