'=' : 'int *' differs in levels of indirection from 'int ** '
时间: 2023-12-25 15:07:04 浏览: 162
这个错误通常是因为你在将一个 `int **` 类型的指针赋值给一个 `int *` 类型的指针时出现的。这两个指针类型之间的间接级别不同,因此不能直接进行赋值操作。
例如,以下代码会导致这个错误:
```
int **p1;
int *p2;
int a = 10;
p1 = &p2; // 这里会出现上述错误
*p1 = &a;
**p1 = 20;
```
这里,我们尝试将 `p2` 的地址赋给 `p1`,但是 `p1` 是一个指向指针的指针,而 `p2` 是一个指向整数的指针,因此它们的间接级别不同。
要解决这个问题,你需要使用适当的类型转换来将 `int **` 类型的指针转换为 `int *` 类型的指针。例如,你可以使用以下代码来修复上面的示例:
```
p1 = (int **)&p2; // 使用类型转换来将 p2 的地址赋给 p1
*p1 = &a;
**p1 = 20;
```
请注意,这里使用了 `(int **)&` 类型转换来将 `int *` 类型的指针 `p2` 的地址转换为 `int **` 类型的指针。这样就可以将 `p2` 的地址赋给 `p1`,并且代码可以正常工作。
相关问题
warning C4047: 'function' : 'int *' differs in levels of indirection from 'int '
这是一个编译器警告,意思是你在一个函数中使用了一个参数,但是该参数的类型与函数定义中声明的类型不匹配。具体来说,可能是你在函数中使用了一个指针类型的参数,但是你在函数定义中将该参数声明为了一个非指针类型的变量。
例如,以下代码会产生这个警告:
```
void foo(int* ptr) {
// do something
}
int main() {
int num = 10;
foo(num); // warning C4047: 'function' : 'int *' differs in levels of indirection from 'int '
return 0;
}
```
要解决这个问题,你需要在函数定义和函数声明中保持参数类型的一致性。在上面的例子中,可以将 `foo` 函数的声明改为 `void foo(int num)` 或将 `foo` 函数的调用改为 `foo(&num)`。
int *' differs in levels of indirection from 'const int '
这个错误信息通常出现在你试图将一个 `int` 类型的指针分配给一个常量 `int` 类型的变量时。这是因为 `int*` 表示一个指向 `int` 类型变量的指针,而 `const int` 表示一个不可变的 `int` 类型变量。这两种类型是不同的,它们之间存在着不同的层级间接性。要解决这个问题,你可以将指针声明为指向一个常量 `int` 类型的指针,或者将变量声明为可变的 `int` 类型变量。
阅读全文