为什么这个赋值是正确的,但它看起来像是将一个 int 赋值给 int*?
Why this assignment is correct while it looks like assigning an int to int*?
第二次赋值出错("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;
}
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
值分配给 一个指针,无效。
您的声明与您认为的不符。这一行:
int* y[100];
不创建 int
的数组,而是 int*
的数组。
如果你想要一个 int
的数组,不要使用 *
:
int y[100];
这将创建一个包含 100 个 int
的数组。
x
是指向 int
的指针。当您 x[5] = 3;
时,您实际上得到 *(x + 5) = 3;
,这会使指针前进,然后取消引用它以到达它指向的 int
。
与 y
相同,但 y
不是指向 int
的指针,它是指向 int
的指针数组。这意味着 *(y + 5)
给你一个 int*&
因为数组的元素类型是 int*
。您不能将 int
分配给 int*
,因此会出现错误。
正如@Andrew Henle 所指出的,int* y[100];
是指向 int 的指针数组,但 x
是指向 int
.
的指针
解析任何 C 声明的有用技术是使用所谓的 Clockwise/Spiral rule.
对此 question 的回答也很有帮助。
第二次赋值出错("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;
}
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
值分配给 一个指针,无效。
您的声明与您认为的不符。这一行:
int* y[100];
不创建 int
的数组,而是 int*
的数组。
如果你想要一个 int
的数组,不要使用 *
:
int y[100];
这将创建一个包含 100 个 int
的数组。
x
是指向 int
的指针。当您 x[5] = 3;
时,您实际上得到 *(x + 5) = 3;
,这会使指针前进,然后取消引用它以到达它指向的 int
。
与 y
相同,但 y
不是指向 int
的指针,它是指向 int
的指针数组。这意味着 *(y + 5)
给你一个 int*&
因为数组的元素类型是 int*
。您不能将 int
分配给 int*
,因此会出现错误。
正如@Andrew Henle 所指出的,int* y[100];
是指向 int 的指针数组,但 x
是指向 int
.
解析任何 C 声明的有用技术是使用所谓的 Clockwise/Spiral rule.
对此 question 的回答也很有帮助。