'=' : 'int *' differs in levels of indirection from 'int ** '
时间: 2023-12-25 16:07:04 浏览: 26
这个错误通常是因为你在将一个 `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 'struct _iobuf *'
这个错误通常出现在你试图将一个'int'类型的值赋值给一个指向'struct _iobuf'结构体的指针变量上。这两种类型的数据是完全不同的,因此编译器发出了这个错误提示。
要解决这个问题,你需要查找并修复代码中的类型不匹配问题。检查变量的声明和赋值语句,确保它们的类型是一致的。如果你不确定如何修复这个问题,请在代码论坛上发帖求助。