Appearance
指针和数组
常用的运算符
- 成员访问 .
- 成员简介访问 ->
- 结构体成员取值 &stu.num
- 结构体成员自增自减 ++stu.num stu.num--
- 间接访问运算符 *stu.p
指针访问的基本使用方法
- 一级直接访问
c
#include <stdio.h>
2
3 struct student{
4 int num;
5 char sex;
6 char name[10];
7 int age;
8
9 };
10
11 int main(void){
12 struct student stu = {100, 'F', "jim", 20};
13 printf("stu.num : %d\n", stu.num);//直接访问
14 printf("stu.sex : %c\n", stu.sex);
15 printf("stu.name : %s\n", stu.name);
16 printf("stu.age : %d\n", stu.age);
17 puts("");
18
19 struct student *p;
20 p = &stu;
21 printf("(*p).num : %d\n", (*p).num);
22 printf("(*p).sex : %c\n", (*p).sex);
23 printf("(*p).name : %s\n", (*p).name);
24 printf("(*p).age : %d\n", (*p).age);
25 puts("");
26 //指针访问
27 printf("p->num : %d\n", p->num);
28 printf("p->num : %c\n", p->sex);
29 printf("p->num : %s\n", p->name);
30 printf("p->num : %d\n", p->age);
31 puts("");
32 return 0;
33 }
result:
stu.num : 100
stu.sex : F
stu.name : jim
stu.age : 20
(*p).num : 100
(*p).sex : F
(*p).name : jim
(*p).age : 20
p->num : 100
p->num : F
p->num : jim
p->num : 20
嵌套指针的使用方法
c
1 #include <stdio.h>
2
3 struct score{
4 unsigned int chinese;
5 unsigned int english;
6 unsigned int math;
7 };//没有使用到
8
9 struct student{
10 unsigned int stu_num;
11 unsigned int score;
12 };
13
14 struct teacher{
15 unsigned int work_num;
16 unsigned int salary;
17 };
18
19 struct people{
20 char sex;
21 char name[10];
22 int age;
23 struct student *stup;
24 struct teacher ter;
25 };
26
27 void struct_print1(void)
28 {
29 struct student stu = {1001, 99};
30 struct teacher ter = {8001, 8000};
31 struct people jim = {'F', "JimGreen", 20, &stu, 0};
32 struct people jack = {'F', "Jack", 50, NULL, ter};
33 struct people *p;
34
35 p = &jim;
36 printf("jim score: %d\n", jim.stup->score);//访问成员的指针结构体
37 printf("jim score: %d\n", p->stup->score);
38 p = &jack;
39 printf("jack score: %d\n", jack.ter.salary);//访问成员的普通结构体
40 printf("jack score: %d\n", p->ter.salary);
41 }
42 void struct_print2(void){
43 struct student stu = {1001, 99};
44 struct teacher ter = {8001, 8000};
45 //struct people a[2] = {'F', "JimGreen", 20, &stu, 0}, \
//{'F', "Jack", 50, 0, ter};这里应该由大括号包裹,但是上传时会出错所以去掉了
46 struct people *p;
47 p = a;
48 printf("Jim score: %d\n", a[0].stup->score++);//通过++来确定是不是访问的同一个数据
49 printf("Jim score: %d\n", ++p[0].stup->score);
50 printf("Jim score: %d\n", p[0].stup->score++);
51
52
53 printf("Jack salary: %d\n", a[1].ter.salary++);
54 printf("Jack salary: %d\n", p[1].ter.salary++);
55 printf("Jack salary: %d\n", (p+1)->ter.salary++);
56 }
57
58 int main(){
59 struct_print1();
60 puts("");
61 struct_print2();
62 puts("");
63 return 0;
64 }
result:
jim score: 99
jim score: 99
jack score: 8000
jack score: 8000
Jim score: 99
Jim score: 101
Jim score: 101
Jack salary: 8000
Jack salary: 8001
Jack salary: 8002
结构体是一个标量,在使用时通过参数传递时候传递整个结构体,最好用指针传递大结构体