A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Eil.tea 中级黑马   /  2015-7-29 23:40  /  1011 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

struct people{int a;
struct people pe;

}

--------------------------------------我是可爱的分割线------------------------------
struct people{int a;
struct P pe;

}


typedef struct people P;

请高手分析上述代码在执行过程中的不同,因为我使用下边这种方式在执行过程中会出现警告。

9 个回复

倒序浏览
可以的话  把代码写全 一点    初步判断是结构体 元素中包含了结构体本身  形成循环调用
回复 使用道具 举报
这是struct嵌套使用吧  你能把代码撸清楚点吗
回复 使用道具 举报
#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;就没问题了,我不清楚这俩地方出现了什么不同。

回复 使用道具 举报
Eil.tea 发表于 2015-7-30 01:29
#include #include int main(int argc, const char * argv[]) {    struct people{        int age;        ...

如果我没猜错的话,应该是变量只能先定义之后才能使用。。。
回复 使用道具 举报
丁铭检 发表于 2015-7-30 12:29
如果我没猜错的话,应该是变量只能先定义之后才能使用。。。

首先不是错误,可以执行,但是会有警示
回复 使用道具 举报
Eil.tea 发表于 2015-7-30 12:57
首先不是错误,可以执行,但是会有警示

那警告可能是因为你这种结构体方式回出现死循环的现象。。。
回复 使用道具 举报
本帖最后由 Eil.tea 于 2015-7-30 16:21 编辑
丁铭检 发表于 2015-7-30 16:01
那警告可能是因为你这种结构体方式回出现死循环的现象。。。

这个解释不对,P换成 people警告就没了。
回复 使用道具 举报
typedef struct people P;
这一句是自定义了一个类型P,去掉typedef就是定义一个people类型的结构体变量P,而结构体里面是
struct P *p
这一句展开了就是struct (struct people P) *p,括号就是自定义类型P,很显然,struct不需要两遍,但也没有什么错,所以就警告了
你可以先试试把struct P *p 的struct去掉,看看情况
回复 使用道具 举报
白方镜世 发表于 2015-7-30 18:58
typedef struct people P;
这一句是自定义了一个类型P,去掉typedef就是定义一个people类型的结构体变量P, ...

解释的通,但是可以写两遍吗?我试试。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马