int [3][4];int *p;p=a;报错assignment from incompatible pointertype
时间: 2024-06-03 17:07:26 浏览: 80
int [3][4]是一个二维数组,它的元素类型是int [4]。而p是一个指向int类型的指针,因此p和a的类型不兼容,不能直接进行赋值操作。如果要让p指向a数组,可以使用以下代码:
int a[3][4];
int (*p)[4]; // 定义一个指向int [4]类型的指针
p = a; // p指向a数组的首地址
相关问题
c语言报错:warning: assignment from incompatible pointer type
这个警告通常出现在将一个类型的指针赋值给另一种类型的指针时。比如:
```c
int *ip;
char *cp;
ip = cp; // 这里会出现警告
```
这是因为 `ip` 指向一个 `int` 类型的数据,而 `cp` 指向一个 `char` 类型的数据,它们的类型不同。
如果你想让代码能够编译通过,可以使用类型转换来将 `cp` 指向的数据转换为 `int` 类型,例如:
```c
ip = (int *)cp; // 使用类型转换
```
不过,在进行类型转换时需要确保转换是安全的,否则可能会导致运行时错误。
error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types] tarshut=(int *)malloc(9*sizeof(int));
抱歉,我之前的回答中有一个错误。在C语言中,不需要进行强制类型转换来给指针赋值。`malloc` 函数返回的指针类型是 `void*`,可以直接赋值给任意类型的指针。因此,在您的代码中,不需要将 `malloc` 的返回值强制转换为 `int*` 类型。
以下是修正后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
int *fun()
{
int *tarshut;
tarshut = malloc(9 * sizeof(int));
if (tarshut == NULL) {
printf("内存分配失败");
exit(1);
}
for (int i = 0; i < 9; i++) {
tarshut[i] = i;
}
return tarshut;
}
int main()
{
int *tarshut;
tarshut = fun();
for (int i = 0; i < 8; i++) {
if (tarshut[i] != tarshut[i+1]) {
printf("tarshut[%d] = %d\n", i, tarshut[i]);
return 0;
}
}
free(tarshut);
tarshut = NULL;
return 0;
}
```
现在,代码中的内存分配部分已经修正,不再会出现类型不兼容的警告。同时,请确保在使用完动态分配的内存后,使用 `free` 函数释放该内存,并将指针设置为 `NULL`。这样可以避免内存泄漏和悬挂指针。
阅读全文