c - 来自不兼容指针类型的赋值[Wincompatible-pointer-types]
问题描述
对于测试任务,我应该检测以下 C 程序中的错误:
#include <stdlib.h>
#include <stdio.h>
typedef struct {
struct chain *next;
int contents; } chain;
int main() {
int index;
chain *list;
chain *p;
chain *pointer;
list = malloc(sizeof(chain));
p = list;
for(index=0;index<10;index++) {
(*p).contents = index;
(*p).next = malloc(sizeof(chain));
p = (*p).next;
} ;
p = pointer = list;
index = 0;
while (index < 9) {
printf("cell # %d: %d\n",index,(*p).contents);
p = (*p).next;
free(pointer);
pointer = p;
index++;
} ;
printf("First cell: %d\n",(*list).contents);
return 0;
}
我收到以下 2 个错误:
Assignment from incompatible pointer type [Wincompatible-pointer-types]
在声明中p=(*p).next
。
我有一种感觉,这可能是微不足道的,但我是 C 的完全新手,无法弄清楚这些语句的正确语法。非常感谢帮助。
解决方案
typedef struct {
struct chain *next;
int contents;
} chain;
这将创建一个匿名结构chain
。但是next
指针是类型的struct chain*
。但是struct chain
您的代码中根本没有定义类型!所以编译器无法知道类型chain
和struct chain
.
您可以改为命名结构:
typedef struct chain {
struct chain *next;
int contents;
} chain;
推荐阅读
- .net - Microsoft.Exchange.WebServices.Data -- 底层连接已关闭错误
- python - 如何在 Visual Studio Code 中打开“launch.json”文件?
- javascript - 为什么素数分解函数不能正常工作?
- javascript - Kubernetes Javascript 客户端库适用于本地但不适用于 GKE
- r - 用 ggplot 绘制多个 ACF
- python - 我想要多个列表指向python中的相同内存
- keyboard - AutoHotkey 用 [Right CTRL] + i, j,k,l 模拟箭头键
- powershell - Powershell枚举访问数据库中的子对象
- php - laravel 不显示来自 mysql 数据库的图像
- asp.net-mvc - 带有 .NET Framework 客户端的 IdentityServer4