结构数组:
struct date dates[100];
struct date dates[]={
{4,5,2015},{2,4,2005}
};
#include <stdio.h>
struct point {
int x;
int y;
};
struct rectangle{
struct point p1;
struct point p2;
};
void printrect(struct rectangle r)
{
printf("<%d, %d> to <%d, %d>\n",r.p1.x,r.p1.y,r.p2.x,r.p2.y);
}
int main(int argc, char **argv) {
struct rectangle rect[]={ //结构数组
{{1,2},{3,4}},
{{5,6},{7,8}} //结构中的结构
};
int i;
for(i=0;i<2;i++)
{
printrect(rect[i]);
}
return 0;
}
#include <stdio.h>
struct point {
int x;
int y;
};
struct rectangle{
struct point p1;
struct point p2;
};
void printrect(struct rectangle r)
{
printf("%d\n",(r.p1.x));
printf("%d,%d,%d\n",sizeof(r.p1.x),sizeof(r.p1),sizeof(r));
printf("%p,%p,%p\n",&(r.p1.x),&(r.p1.y),&(r.p2.x));
}
int main(int argc, char **argv) {
struct rectangle rect[]={
{{1,2},{3,4}},
{{5,6},{7,8}}
};
int i;
for (i=0;i<2;i++)
printrect(rect[i]);
return 0;
}
-------------------------------------
1
4,8,16 //可见结构的sizeof正好等于全部成员的sizeof之和
0x100038,0x10003c,0x100040 //结构内的成员之间连续,相邻的成员的地址的差等于对应的成员的sizeof
5
4,8,16
0x100038,0x10003c,0x100040
typedef:自定义数据类型
typedef struct {
int x;
int y;
}point; //简化了复杂的名字
point p1={1,2};//相当于stuct point p1={1,2};
union 共用体名称{
成员表列;
}变量名表列;
#include <stdio.h>
union {
int i;
char ch[sizeof(int)];
}chi; //结构体的两个成员共享一个存储空间(即四个字节大小,int的大小)
int main(int argc, char **argv) {
int i;
chi.i=1235;
for (i=0;i<sizeof(int);i++)
printf("%02hhx ",chi.ch[i]);//遍历每一个字节,并以十六进制输出
return 0;
}