所以我的类有两个例子,不确定为什么一个可以工作,另一个不能。
int numSides = 3;
int *valPointer = &numSides;
PrintValue(valPointer);打印3。
int numSides = 3;
int* valPointer;
*valPointer = &numSides;
PrintValue(valPointer);这不起作用,但为什么呢?
课堂笔记说int值不能被赋值为int*。
发布于 2020-12-02 06:04:54
int* valPointer;
*valPointer = &numSides;上面的内容是错误的--您试图将(valPointer-valPointer-points- to的整数)设置为一个地址,这是没有意义的,因为地址和整数(通常来说)是不可互换的。
也许你的意思是这样?
int* valPointer;
valPointer = &numSides;..。这会将valPointer设置为指向numSides。
发布于 2020-12-02 06:10:05
The program
void PrintValue(int*);
void f() {
int numSides = 3;
int *valPointer;
*valPointer = &numSides;
PrintValue(valPointer);
}编译结果:
当当:
<source>:6:17: error: incompatible pointer to integer conversion assigning to 'int' from 'int *'; remove &
*valPointer = &numSides;
^~~~~~~~~
1 error generated.
Compiler returned: 1Gcc:
<source>: In function 'void f()':
<source>:6:17: error: invalid conversion from 'int*' to 'int' [-fpermissive]
6 | *valPointer = &numSides;
| ^~~~~~~~~
| |
| int*
Compiler returned: 1Microsoft编译器:
example.cpp
<source>(6): error C2440: '=': cannot convert from 'int *' to 'int'
<source>(6): note: There is no context in which this conversion is possible
Compiler returned: 2每个编译器都会以自己的方式在错误消息中说明问题所在。
Clang甚至给出了一个建议:
这不一定是正确的。
发布于 2020-12-02 06:16:46
int *valPointer = &numSides;
它声明了一个int *类型的变量valPointer,并在其中存储了numSides的地址。
int * valPointer;*valPointer= &numSides;
这将声明一个类型为int *的变量valPointer,但不会将其初始化为指向任何特定位置。它包含的地址就是堆栈上发生的任何垃圾。然后,它解除对valPointer的引用,这是一个错误,因为valPointer从未初始化过,并尝试将numSides的地址存储在该位置。
我认为你需要的要点是,当单独使用时(例如*valPointer),*用于解除对指针的引用,但当在声明中使用时(例如int *valPointer),它是类型的一部分。另外,请注意,在声明中使用类型和*之间是否有空格或*和变量之间是否有空格并不重要;也就是说,int *foo和int *foo的含义是一样的。
https://stackoverflow.com/questions/65099191
复制相似问题