读书人

关于结构的有关问题。

发布时间: 2012-05-31 12:19:24 作者: rapoo

关于结构的问题。。。。。。。。。。。。。
struct{
int a;
char b;
float c;
}x;

struct{
int a;
char b;
float c;
}y[20],*z;

这两个声明被编译器当做两种截然不同的类型,即使他们的成员列表相同。因此,变量y和z的类型和x的类型不同。
(以上内容出自 C和指针 P196)

问题:那两个声明被当做两种不同的类型,到底不同在哪里,使用的时候有什么不同呢?请各位大侠详解,谢谢!

[解决办法]
y stu (stu为结构体数组--大小为20)
z stu (stu为结构体指针)
x stu (stu为结构体变量)
x *stu (跟z stu 一样为结构体指针)
[解决办法]
结构体指针调用结构体中的变量用->
结构体变量调用结构体中的变量用.

明白了吗?楼主.
[解决办法]
首先明确他是两个不同的结构体
在使用方面x.a=0;
x.b= ;
x.c= ;
z->a=
z->b=
z->c=
y[20].a=
y[20].b=
y[20].c=
[解决办法]
由于内存字节对齐的原因,两个struct的sizeof可能不一样。

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)

[解决办法]
y的类型是数组,z的类型是指针.
当然跟x的类型不同了.
[解决办法]
我认为区别仅在于一个是该结构体变量 一个是该结构体指针型变量 一个是数组
[解决办法]
嗯 对的.
[解决办法]
两个过程等价
struct A {char c;} *p; <==> struct A {char c;}; struct A *p;
[解决办法]
错,如果想要申请指向本结构体的指,应该是

HTML code
{0}{1}
[解决办法]
z,x 现在是类型了,不能直接赋值,
z stu;
x stu1;
stu = *stu1;

这样才可以.

读书人网 >C语言

热点推荐