我有以下代码:
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 也是将地址分配给指针,所以我希望两者都能工作。
我尝试执行这两行并期望两者都能工作,但是将地址分配给数组不起作用,而将数组分配给指针则按预期工作。
arr
是一个“自动”变量。一旦调用它出现的函数,它在内存中的位置通常是固定的。从语言角度来说,您无法通过重新分配来更改它。
即使可以,您也试图将
arr
指向单个 int
,而 arr
是一个 int[5]
。类型错误。
int* ptr = arr; // This works fine
这是经典的“数组衰减为指向第一个元素的指针”的情况。
ptr
是否有一个指向 int
的指针。