结构体互为成员

来源:互联网 发布:中国网络菜市场首页 编辑:程序博客网 时间:2024/04/29 19:32
我定义了两个类型

typedef stuct
{
    int nMember1;
    PBBB pMember2;
}AAA, *PAAA;

typedef struct
{
    int nMember1;
    PAAA pMember2;
}BBB, *PBBB

这样两个类型怎么声明?

struct AAA;
struct BBB;

typedef AAA* PAAA;
typedef BBB* PBBB;

struct AAA
{
    int nMember1;
    PBBB pMember2;
};

struct BBB
{
    int nMember1;
    PAAA pMember2;
};

 
至少有一个,里面必须是另外一个对象的指针


支持楼上的,至少其中有一个当中包含的是另外一个结构的指针
否则就是死循环了


向 fiftymetre(闲人的小乖乖) :
一定要给结构取名字吗?就是
一定要
struct AAA
{.....};
而不能
typedef sturct
{...}AAA;

可以啊,那么以后你要声明一个这种类型的变量a的话,就只需要写AAA a了。
如:
#include <iostream>

using namespace std;

typedef struct{
int i;
char c;
}AAA;
int main()
{
AAA a;
a.i = 3;
a.c = 'A';
cout << a.i << endl;
return 0;
}
#include <iostream>

using namespace std;

typedef struct{
int i;
char c;
}AAA;
int main()
{
AAA a;
a.i = 3;
a.c = 'A';
cout << a.i << endl;
return 0;
}

 

前置声明加指针, 
声明指针变量不需要对象完全定义,只要声明。 就不会造成死循环。


另记:

最后自己测试时遇到问题:

#include <stdio.h>struct aaa;typedef aaa *bbb;struct aaa{int a;char b[4];};int main(){aaa t_a;bbb t_b = &t_a;t_a.a = 6;printf("t_b->a = %d\n",t_b->a);t_a.a = 14;printf("t_b->a = %d\n",t_b->a);}


尝试几次才发现语法错误,
更正之后编译运行无误:

#include <stdio.h>struct aaa;typedef struct aaa bbb,*ccc;struct aaa{int a;char b[4];};int main(){bbb t_a;ccc t_b = &t_a;t_a.a = 6;printf("t_b->a = %d\n",t_b->a);t_a.a = 14;printf("t_b->a = %d\n",t_b->a);}



0 0
原创粉丝点击