第二个赋值给出了一个错误(不能将类型为“ int”的值分配给类型为“ int *”的实体,为什么在第一次赋值中不会显示相同的错误?
#include <bits/stdc++.h>
using namespace std;
int main()
{
int* x = new int[100];
x[5] = 3;
int* y[100];
y[5] = 3;
return 0;
}
您的声明没有执行您的操作。这行:
int* y[100];
不创建int
的数组,而是int*
的数组。
如果您需要int
的数组,请不要使用*
:
int y[100];
这将创建一个包含100个int
的数组。
x
的类型为pointer to int
,y
的类型为array of 100 pointers to int
。
然后,x[0]
的类型为int&
(对int
的引用),y[0]
的类型为int*&
(对int
的指针的引用)。
因此x[0] = 5
正在将int
值分配给int
参考(完全有效),但是y[0] = 5
试图将int
值分配给指针,这是无效的。
x
是指向int
的指针。当您实际使用x[5] = 3;
时,您会得到*(x + 5) = 3;
,它使指针前进,然后对其取消引用以指向其指向的int
。
与y
一样,但y
不是指向int
的指针,它是指向int
的指针的数组。这意味着*(y + 5)
给您一个int*&
,因为数组的元素类型为int*
。您无法将int
分配给int*
,因此会出现错误。