*//struct语句
struct的格式:
struct struct_tag {
member-list;
member-list;
member-list;
...
};
struct_tag是结构体标签 member-list是标准的变量定义
应该注意的是 struct最后"}"后应该加分号";"
typedef创建类型别名
typedef struct
{
int a;
char b;
double c;
} test_struct;
之后用test_struct可以作为类型声明新的结构体变量
test_struct u1, u2[20], *u3;
结构体变量的初始化
#include <stdio.h>
int main(void)
{
struct test_struct
{
char name[50];
int school_id;
int class_id;
};
struct test_struct _101 = {"JoeyCui",10001,2201};
}
又作
#include <stdio.h>
int main(void)
{
struct test_struct
{
char name[50];
int school_id;
int class_id;
}struct test_struct _101 = {"JoeyCui",10001,2201};
;
}
注意
如果在定义结构体变量的时候没有初始化,那么后面就不能全部一起初始化了
//错误
struct test_struct _101;
_101 = {"JoeyCui",10001,2201};
//正确
_101.name = "JoeyCui";
_101.school_id = 10001;
_101.class_id = 2201;
访问结构体成员
//正确
_101.name = "JoeyCui";
_101.school_id = 10001;
_101.class_id = 2201;
//即为此
指向结构的指针
定义指向结构的指针,方式与定义指向其他类型变量的指针相似
'struct test_struct *struct_pointer;'
在上述定义的指针变量中存储结构变量的地址
'struct_pointer = &_101;'
注意:
1.结构体变量的地址就是结构体的首地址
2.结构体第一个成员的地址就是结构体的首地址
这数组类似,但不完全相同。
为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符
'struct_pointer->name;'
.和->访问结构体元素的实质是一样的,只是C语言规定:
用结构体变量来访问元素用.
用结构体变量的指针来访问元素用->
实际上在高级语言中已经不区分了,都用.
结构体变量的点号.或者->访问元素的实质是什么?其实本质上还是用指针来访问的。
代码实践
#include <stdio.h>
int main(void)
{
struct test_struct
{
char name[50];
int school_id;
int class_id;
};
struct test_struct _101 = {"JoeyCui",10001,2201};
printf("_101's name = %s\n_101's school_id =%d\n_101's class_id = %d\n", _101.name, _101.school_id, _101.class_id);
}