结构体的格式:
struct 结构体名称
{
数据类型 成员a;
数据类型 成员b;
......
数据类型 成员n ;
};
结构体的初始化:
#include<stdio.h>
struct object
{
char a1[100];
char a2[100];
int a3;
int a4;
}
int main()
{
struct object an = {"How are you!","Are you ok?",233,666};
}
这个时候,an={} 花括号里面的东西就会按顺序依次赋给成员a1[100]
成员a2[100],成员a3,成员a4.
结构体成员的访问
[访问的话用(定义的变量).(成员)或 (定义的变量)->(成员)]:
例:
↓-----先定义一个结构体-----↓
#include<stdio.h>
#include<string.h>
struct object
{
int a;
char b;
char c[100];
};
int main()
{
struct object op;//定义一个结构体变量op
op.a = 4; //(op的成员a的值为4)
op.b = 'C'; //(op的成员b的值为C)
strcpy(op.c,"How are you!");//(op的成员c表示:“How are you!”)
printf("%d-%c-%s",op.a,op.b,op.c);
}
除此之外 还可以用指针
int main()
{
struct object op;//定义一个结构体变量op
struct object *opc= &op;//定义一个指向op的结构体指针
---------------------------------
opc->a = 4; //(op的成员a的值为4)
opc->b = 'C'; //(op的成员b的值为C)
---------------------------------
(*opc).a = 4;//(op的成员a的值为4)
(*opc).b = 'C';//(op的成员b的值为C)
---------------------------------
strcpy(opc->c,"How are you!");//(op的成员c表示:“How are you!”)
printf("%d-%c-%s",opc->a,opc->b,opc->c);
}
两者都会输出:
4-C-How are you!
上面的三道绿线中间的是指针的两种用法,注意第二种必须加括号,因为’ . ‘的运算优先于’ * ’
此外,请注意,不要把(*opc).a 写成 *(opc).a这样会报错:
error: request for member ‘ada’ in something not a structure or union.
结构体的镶嵌:
#include<stdio.h>
struct object
{
char a1[100];
char a2[100];
int a3;
int a4;
}
struct pc
{
struct object p1c;//相当于在结构体pc中又添加了个p1c结构体变量。
int p2c;
};
int main()
{
struct pc an = {"How are you!","Are you ok?",233,666,555};
//仍然是按顺序赋给各成员,不过在pc那种结构体中,先把内部的
//结构体struct object p1c拆开再依次赋值。
//其中:
//an.plc.a1 = How are you!|
//an.plc.a2 = Are you ok? |
//an.plc.a3 = 233 | <-访问成员格式an.p1c.xx
//an.plc.a4 = 666 |
//an.p2c = 555 |
}
当然,这些都是结构体的一些基本东西,结构体除了这些基本的还有很多东西,应用也很灵活。