为什么看起来像是将一个int分配给int *一样正确?

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

第二个赋值给出了一个错误(不能将类型为“ 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;
}
c++ arrays pointers new-operator dynamic-memory-allocation
2个回答
1
投票

您的声明没有执行您的操作。这行:

int* y[100];

不创建int的数组,而是int*的数组。

如果您需要int的数组,请不要使用*

int y[100];

这将创建一个包含100个int的数组。


0
投票

x的类型为pointer to inty的类型为array of 100 pointers to int

然后,x[0]的类型为int&(对int的引用),y[0]的类型为int*&(对int的指针的引用)。

因此x[0] = 5正在将int值分配给int参考(完全有效),但是y[0] = 5试图将int值分配给指针,这是无效的。


0
投票

x是指向int的指针。当您实际使用x[5] = 3;时,您会得到*(x + 5) = 3;,它使指针前进,然后对其取消引用以指向其指向的int

y一样,但y不是指向int的指针,它是指向int的指针的数组。这意味着*(y + 5)给您一个int*&,因为数组的元素类型为int*。您无法将int分配给int*,因此会出现错误。

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