gpt4 book ai didi

c++ - 将数组传递给函数,这两种方法有什么区别?

转载 作者:行者123 更新时间:2023-12-01 14:20:23 25 4
gpt4 key购买 nike

在下面的示例中,两个函数返回相同的结果。有人可以解释一下它们之间的区别吗?

#include <iostream>

void func1( int (&a)[4]) {
int b = a[3];
std::cout << b << std::endl;
}

void func2( int a[4]) {
int b = a[3];
std::cout << b << std::endl;
}

int main()
{
int b[4] = {3,2,3,4};
func1(b);
func2(b);
return 0;
}

最佳答案

在func2中,int a[4]等同于int *a,换句话说,4根本无所谓。您可以将任意大小的数组传递给此函数。

但是,对于 func1,您必须将大小为 4 的数组传递给它,否则会出现编译错误。

例如,如果您向 func1 提供一个大小为 8 的数组,则会出现此编译错误,

main.cpp:26:12: 错误:从类型为“int [8]”的表达式对类型为“int (&)[4]”的引用的初始化无效,无论数组是什么您提供给函数的大小是。

此外,如果您在 func1 中打印 sizeof(a) 函数的输出,它将以字节为单位返回输入数组的大小,在本例中为 16 =4*4 字节。对于 func2,它返回 a 的大小,这是一个指向 int 的指针(在我的例子中,大小是 8 个字节)。

关于c++ - 将数组传递给函数,这两种方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61023445/

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