我知道这可能是一个常见问题,但我尝试搜索但仍然找不到明确的答案。
我有以下代码:
int* f() {
int a[] = {1,2,3};
return a;
}
int main() {
int a[] = f(); // Error here
getch();
return 0;
}
此代码产生错误消息:“Cannot convert from 'int *' to 'int []'
"
我发现这很奇怪,因为我读过指针和数组是相似的。例如,我们可以使用 a[i] 代替 *(a + i)。
谁能给我一个明确的解释吗?
这段代码实际上有两个错误。
首先,您要返回临时的地址(其中的 int 数组)f
),因此函数返回后其内容未定义。任何访问返回指针指向的内存的尝试都将导致未定义的行为。
其次,C++ 中不存在从指针到数组类型的隐式转换。它们相似,但不完全相同。数组可以衰减为指针,但反之则不行,因为信息会在途中丢失 - 指针仅表示内存地址,而数组表示连续区域的地址,通常具有特定的大小。而且你不能分配给数组。
例如,我们可以使用 a[i] 代替 *(a + i)
然而,这与数组和指针之间的差异关系不大,它只是指针类型的语法规则。当数组退化为指针时,它也适用于数组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)