gpt4 book ai didi

c++ - 数组变量是 C++ 中的引用吗?

转载 作者:行者123 更新时间:2023-11-30 00:44:07 26 4
gpt4 key购买 nike

我刚刚学习 C++,对数组和引用有点困惑。我写了下面的程序:

void printArray(int arr[]) {
cout << arr[0] << arr[1] << arr[2] << endl;
}

int main() {
int arr[3] = {5, 7, 9};
int *aPtr = &arr[0];
cout << aPtr[0] << aPtr[1] << aPtr[2] << endl;
int *bPtr = arr;
cout << bPtr[0] << bPtr[1] << bPtr[2] << endl;
printArray(arr);
}

输出是:

579
579
579

我有两个问题:

  1. C++ 中的数组是引用吗?我的意思是,我可以声明 i = &i[0] 吗?
  2. 如果第一个问题的答案是肯定的,我可以说因为数组是引用我们不需要在函数printArray 的参数中使用&。我的意思是,我们不以这种方式声明函数 printArray(int &arr[])?

最佳答案

不,数组不是 C++ 中的引用。它是一个数组,其长度构成类型的一部分(例如 int[3] 的类型与 int[42] 的类型不同).

令人困惑的是,C++ 从 C 继承了一些奇怪的特性,

  1. 数组函数参数的类型“调整”为指针
  2. 数组名很容易“退化”为指针。这使得将数组分配给指针成为可能。

上面的第 1 点意味着这两个函数声明是完全等价的:

// two ways do declaring the same function
void foo(int a[42]);
void foo(int* a);

第 2 点意味着您可以调用传递给它数组的函数:

int a[3] = {};
int b[100] = {};

foo(a);
foo(b);

和其他有趣的东西,例如,表达式 +a 的类型是 int*

关于c++ - 数组变量是 C++ 中的引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50318476/

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