读书人

构造体与指针!

发布时间: 2013-09-05 16:02:06 作者: rapoo

结构体与指针!!!
有如下结构体的声明:
struct data
{
char x;
int y;
int z;
struct data p;
};
这种类型的自引用是非法的。而下面这个声明确是合法的:
struct data
{
char x;
int y;
int z;
struct data *p;
};
这个声明和前面那个声明的区别在于p现在是个指针而不是结构。编译器在结构的长度确定之前就已经知道指针的长度,所以这种类型的自引用时合法的。
为什么说编译器在结构的长度确定之前就已经知道指针的长度?此例中指针的长度是多少,为啥不能用sizeof(p)求?

[解决办法]
这个就是和链表差不多了
指针大小在32位机上都是4个字节大小的,可以确定结构体大小!
[解决办法]

引用:
Quote: 引用:

补充下...还要考虑数据对齐的情况 实际大小可能会变大一点..这个暂时不考虑

哪些情况需要考虑数据对其?

对32位系统来说,一般长度是4个字节,所以大小都是4的整倍数,介于4的倍数之间的就要对齐
64位的话就是8字节

你可以看下这里

读书人网 >C语言

热点推荐