gpt4 book ai didi

c - 结构指针声明给出错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:54:44 25 4
gpt4 key购买 nike

struct node {
int data;
struct node *next;
};
struct node * list,root;
list=NULL;
root=NULL;

上面是我试图在我的程序中创建的,我的程序在编译时出错

kbc.c:8: warning: data definition has no type or storage class
kbc.c:8: error: conflicting types for ‘list’
kbc.c:7: note: previous declaration of ‘list’ was here
kbc.c:8: warning: initialization makes integer from pointer without a cast
kbc.c:9: warning: data definition has no type or storage class
kbc.c:9: error: conflicting types for ‘root’
kbc.c:7: note: previous declaration of ‘root’ was here
kbc.c:9: warning: initialization makes integer from pointer without a cast

如果有人想看,这里是完整的程序我只是在编写一个程序来编写一个链接列表

#include<stdio.h>
#include<stdlib.h>
struct node {
int data;
struct node *next;
};
struct node * list,root;
list=NULL;
root=NULL;
struct node * create_node(int );
int main ()
{
int i,j,choice;
printf("Enter a number this will be root of tree\n");
scanf("%d",&i);
printf("Give us choice 1 to enter more numbers 0 to quit\n");
scanf("%d",&choice);
switch (choice)
{
case 1:break;

case 2:break;
}
}
// end of function main
struct node * create_node(int data)
{
struct node *temp;
t emp = (struct node *)malloc(sizeof(struct node));
return temp;
}

最佳答案

部分问题是您声明了一个指针和一个结构。您的声明等同于:

struct node *list;
struct node root;

这就是为什么指示指​​针的“*”属于变量名(标准语中的declarator)而不属于类型。

问题的另一部分是您只能使用(常量)初始化程序在全局范围内初始化变量;您不能在全局范围内编写作业。

有多种方法可以解决这个问题:

typedef struct node *NodePtr;
NodePtr list = NULL, root = NULL;

struct node *list = NULL, *root = NULL;

struct node *list = NULL;
struct node *root = NULL;

请注意,不使用 #define 代替 typedef 的众多原因之一是:

#define NodePtr struct node *        // BAD!
NodePtr list = NULL, root = NULL; // BAD!

恰好在问题中制造了错误的情况。

解决一些错误消息:

kbc.c:8: warning: data definition has no type or storage class

这是指行:

list = NULL;

因为您是在全局范围内编写的,所以这被解释为变量定义,没有显式类型。现在这是可怕的风格,但在原始(标准前)C 中是允许的,使用“implicit-int”规则来推断类型——这也解释了一些后续消息。 'implicit-int' 解释在 C89 中已过时并且未被 C99 正式支持,但编译器仍然识别它(至少在 C99 模式下带有警告)。

因此,这被解释为:

int list = NULL;

现在解释这些消息:

kbc.c:8: error: conflicting types for ‘list’
kbc.c:7: note: previous declaration of ‘list’ was here

您编写的代码必须被编译器解释为 list 的第二个声明。

kbc.c:8: warning: initialization makes integer from pointer without a cast

这是解释;因为第二个 list 是一个 intNULL 在这个实现中是一个空指针常量(可能是 #define NULL ((void * )0)),有一个从指针到整数的转换,没有强制转换。

第二组警告类似地适用于 root

关于c - 结构指针声明给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6403469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com