c语言//为啥这个结构体类型不匹配?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言//为啥这个结构体类型不匹配?相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<stdlib.h>

typedef struct
char data;
struct test *lchild,*rchild;
test;

void createtree(test*Pointer)
test *FFF;
FFF= (test*)malloc(sizeof(test));
FFF->data='B';
FFF->lchild=NULL;
FFF->rchild=NULL;
Pointer->lchild= FFF; // [Warning] assignment from incompatible pointer type [enabled by default]


int main(void)
test L;
createtree(&L);

如图我把L的地址给了指针变量,指针变量Pointer拥有L的地址.我再另外开辟了一段内存地址,给了FFF。然后用Pointer->lchild取得FFF所在的地址,为什么不行?

这个warning主要是由于你递归形式的定义了新的type test和struct test不匹配导致的

正确写法是,另起一个结构体名

参考技术A 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

  在C语言中,定义一个结构的一般形式为:

1234

struct结构名//成员表列;

  

  成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:“类型说明符 成员名;”。成员名的命名应符合标识符的书写规定。例如:

1234567

struct stuint num;char name[20];char sex;float score;;

  

  在这个结构定义中,结构名为stu,该结构由4个成员组成。 第一个成员为num,整型变量;第二个成员为name,字符型数组;第三个成员为sex,字符型变量;第四个成员为score,浮点型变量。 应注意在括号后的分号是必不可少的。

  然后,当结构定义完成后,即创建了一种数据类型,可以像int、float等内置类型一样使用,以上面定义的stu结构体来和int类型对比着看。

123456

int a;//定义一个int类型的变量astu a; //定义一个stu类型的变量aint *p; //定义一个int类型的指针pstu *p; //定义一个stu类型的指针pint a[10];//定义一个int类型的数组a,它有10个元素,每个元素是int类型stu a[10];//定义一个stu类型的数组a,它有10个元素,每个元素是stu类型。追问

我说怎么这么快,原来是复制粘贴,你懂c吗就在这复制

参考技术B 结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体。 参考技术C 虽然逻辑上相等但是编译器不够聪明。改学C++吧,C的意义已经越来越小了 参考技术D

typedef struct的时候没有命名,那么定义里面是struct test就是另外一个结构。

以上是关于c语言//为啥这个结构体类型不匹配?的主要内容,如果未能解决你的问题,请参考以下文章

c/c++结构体struct的使用,只有一个成员为啥要定义成结构体

c/c++语言创建单链表新结点时为啥不直接用结点对象,如直接lnode p;而是非要用指针加malloc或new实现?

c语言怎么用文件保存和读取 结构体数组/

c/c++结构体,循环输入有问题,求指导

怎么用 C/C++ 把结构体数组转成 JSON串

结构体状态复位函数/使用完后将结构体恢复成初始值的怎么写呢?