黑马程序员技术交流社区
标题: 结构体分析 [打印本页]
作者: Eil.tea 时间: 2015-7-29 23:40
标题: 结构体分析
struct people{int a;
struct people pe;
}
--------------------------------------我是可爱的分割线------------------------------
struct people{int a;
struct P pe;
}
typedef struct people P;
请高手分析上述代码在执行过程中的不同,因为我使用下边这种方式在执行过程中会出现警告。
作者: liusuizuoyou 时间: 2015-7-30 00:35
可以的话 把代码写全 一点 初步判断是结构体 元素中包含了结构体本身 形成循环调用
作者: 刘唐飞 时间: 2015-7-30 01:17
这是struct嵌套使用吧 你能把代码撸清楚点吗
作者: Eil.tea 时间: 2015-7-30 01:29
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
struct people{
int age;
struct P *p;
};
typedef struct people P;
P *b=(P *)malloc(sizeof(P));
b->age=12;
b->p=b;
return 0;
}
---------------我是可爱的分割线------------------------
你们可以把代码执行一下,会有个警告,但是如果把结构体里的struct P *p;改成 struct people *p;就没问题了,我不清楚这俩地方出现了什么不同。
作者: 丁铭检 时间: 2015-7-30 12:29
如果我没猜错的话,应该是变量只能先定义之后才能使用。。。
作者: Eil.tea 时间: 2015-7-30 12:57
首先不是错误,可以执行,但是会有警示
作者: 丁铭检 时间: 2015-7-30 16:01
那警告可能是因为你这种结构体方式回出现死循环的现象。。。
作者: Eil.tea 时间: 2015-7-30 16:17
本帖最后由 Eil.tea 于 2015-7-30 16:21 编辑
这个解释不对,P换成 people警告就没了。
作者: 白方镜世 时间: 2015-7-30 18:58
typedef struct people P;
这一句是自定义了一个类型P,去掉typedef就是定义一个people类型的结构体变量P,而结构体里面是
struct P *p
这一句展开了就是struct (struct people P) *p,括号就是自定义类型P,很显然,struct不需要两遍,但也没有什么错,所以就警告了
你可以先试试把struct P *p 的struct去掉,看看情况
作者: Eil.tea 时间: 2015-7-30 22:17
解释的通,但是可以写两遍吗?我试试。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |