为什么我不能将地址分配给数组,但在 C++ 中可以将数组分配给指针?

问题描述 投票:0回答:1

我有以下代码:

int main() {
    int val = 25;
    int arr[] = {10, 20, 30, 40, 50};

    arr = &val; // This line causes an error
    int* ptr = arr; // This works fine
    cout << ptr;
    return 0;
}

我不明白为什么将单个变量的地址分配给数组 (arr = &val) 会导致错误,但将数组分配给指针 (int* ptr = arr) 却没有任何问题。有人可以解释为什么会发生这种情况吗?我认为这两个操作的行为方式应该相同,因为数组的行为类似于指针。根据我的理解, arr = &val 是将地址分配给指针,而 int* ptr = arr 也是将地址分配给指针,所以我希望两者都能工作。

我尝试执行这两行并期望两者都能工作,但是将地址分配给数组不起作用,而将数组分配给指针则按预期工作。

c++ arrays pointers
1个回答
0
投票

arr
是一个“自动”变量。一旦调用它出现的函数,它在内存中的位置通常是固定的。从语言角度来说,您无法通过重新分配来更改它。

即使可以,您也试图将

arr
指向单个
int
,而
arr
是一个
int[5]
。类型错误。

int* ptr = arr; // This works fine

这是经典的“数组衰减为指向第一个元素的指针”的情况。

ptr
是否有一个指向
int
的指针。

© www.soinside.com 2019 - 2024. All rights reserved.