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的意义已经越来越小了 参考技术Dtypedef struct的时候没有命名,那么定义里面是struct test就是另外一个结构。
以上是关于c语言//为啥这个结构体类型不匹配?的主要内容,如果未能解决你的问题,请参考以下文章
c/c++结构体struct的使用,只有一个成员为啥要定义成结构体