标签:com http class blog style div img code string log color
聚合数据类型
能够同时存储超过一个的单独数据。 c语言提供了数组和结构体。
1.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h>#include <math.h>voidmain(){struct{    inta;    }x,*b;intc[2]={1,2};x.a=1;b=c;printf("%d \n",b[1]);printf("%d \n",x.a);} | 
| 1 2 | warning C4133: ‘=‘: incompatible types - from ‘int *‘to ‘struct *‘Linking... | 
为了证明,指针变量未初始化时,只分配了指针的4个字节的内存空间,上面的程序运行后

2.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h>#include <math.h>voidmain(){struct{    inta;    intb;    }x;struct{    inta;    intb;    }*b;b=&x;} | 
| 1 | warning C4133: ‘=‘: incompatible types - from ‘struct *‘to ‘struct *‘ | 
即使成员列表完全相同,编译器仍将其当作不同的结构体。
可以这样实现
| 1 2 3 4 5 6 7 | structsa{    inta;    intb;    };structsa x;structsa *b;//sa称作标签b=&x; | 
还可以这样
| 1 2 3 4 5 6 7 | typedefstruct{    inta;    intb;    }sa;sa x;sa *d;d=&x; | 
一般都这么做,可以将其放在一个头文件中。
3
结构的自引用
| 1 2 3 4 5 | structsa{    inta;    intb;    structsa sb;    }; | 
| 1 | error C2079: ‘sb‘uses undefined struct‘sa‘ | 
结构体的长度是没办法确定的,(产生了无穷的递归)
| 1 2 3 4 5 | structsa{    inta;    intb;    structsa *sb;    }; | 
结构体的长度是确定的,指针的长度始终为4个字节
进一步说明了 指针变量和 聚合数据类型名(数组名,结构体名的区别)
| 1 2 3 4 5 | typedefstruct{    inta;    intb;    ss *sb;    }ss; | 
这么定义是错误的,在结构体内部ss还未定义。
应该这么定义
| 1 2 3 4 5 | typedefstructsa{    inta;    intb;    structsa *sb;    }ss; | 
标签:com http class blog style div img code string log color
原文地址:http://www.cnblogs.com/chen-/p/3698089.html