我正在阅读C++ Primer,当我读到以下内容时,它真的让我很困惑:
int odd[] = {1, 3, 5, 7, 9};
int even[] = {0, 2, 4, 6, 8};
//return a pointer, which points an array with 5 int
decltype(odd) *arrPtr(int i)
{
return (i % 2) ? &odd : &even;
}
int main()
{
cout << "odd: " << odd << endl;
cout << "even: " << even << endl;
cout << arrPtr(3);
}
Run Code Online (Sandbox Code Playgroud)
结果是:
odd: 0x472010
even: 0x472030
0x472010
Run Code Online (Sandbox Code Playgroud)
让我困惑的是为什么需要&。我的意思是,有必要添加“&”吗?
我尝试像这样删除&:
odd: 0x472010
even: 0x472030
0x472010
Run Code Online (Sandbox Code Playgroud)
但它就是行不通:
[Error] cannot convert 'int*' to 'int (*)[5]' in return
Run Code Online (Sandbox Code Playgroud)
这是我的想法:
它不能是“奇数地址”,因为它将成为二阶指针。 所以它一定是一个参考。(这是我的观点)
那么问题来了,为什么一定要作为参考呢?
谁能为我解释一下吗?欢迎任何答案。多谢。
decltype(odd) *arrPtr(int i)
Run Code Online (Sandbox Code Playgroud)
这行代码表示您将返回一个指向int大小为 5 的数组的指针。
当你这样做时
return (i % 2) ? odd : even;
Run Code Online (Sandbox Code Playgroud)
您试图返回一个int大小为 5 的数组,而不是指向它的指针。因此,&在
return (i % 2) ? &odd : &even;
Run Code Online (Sandbox Code Playgroud)
odd然后获取or的地址even,并将其作为指针返回,这就是函数期望您返回的内容。
注意:在C++中,不能返回数组,但可以返回指针。
另请注意:类型,当使用&is int (*)[5]、 not时int **,函数的返回类型本质上是int (*)[5]、 notint *
另请注意:正如下面的注释中所述,通常来说,如果您只想返回整数数组,则可以使用 的返回类型int *。返回时Anint[5]将被隐式转换为 a int *。使用decltype(odd)会增加复杂性。
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |