结构体如下:
struct student
{
int num;
char name[20];
char sex;
float score;
};
1. 结构体的初始化
struct student aa = {1001, "zhang", 'M', 80, 5};
2. 引用整个结构体
struct student *p = &aa; //p指向aa这个结构体的首地址
3.结构体中,字符数组的引用
char *q = aa.name; //q指向 "zhang" 。因为 "zhang" 本身已经是字符数组, 所以在指向他时,不需要再加一个 “&”
4.结构体中,普通类型的引用
int *r= &aa.num; // r 指向 1001 的地址
char *s= &aa.sex; // r 指向 'M' 的地址
5.
因为有了p指向aa, 所以在引用aa的成员时, aa.num 和 p->num是等价的,和 (*p).num也是等价的
即 aa.num , p->num, (*p).num 均指向 name
6.
结构体数组
struct student sru[3] =
{
{1001, "zhang", 'M', 60.5},
{1002, "peng", 'M', 100},
{1003, "Wang", 'W', 90.9}
}
struct struct *p = stu;
如果此时,我们想访问数组中第一个元素的name, 即 "zhang".
有三种方法:
A) 直接访问数组stu
stu[0].name;
B) 用指针p访问数组stu
因为p已经指向了stu, 所有不能再用"."来访问了,应该用"->"
p->name;
C) 接B,也可以写成(*p).name;
以此类推,如果想访问数组中第二个元素的name, 即 "peng".
有三种方法:
C) 直接访问数组stu
stu[1].name;
D) 用指针p访问数组stu
(p+1)->name;
注意,因为+1是一个四级运算符,所以必须先用括号括起来
E) 接D,也可以写成(*p).name;
(*(p+1)).name;