15-17行定义并输出结构体变量的相关属性(*w的()不能省略,因为.运算符优先级比*高)
可以用w->name来替换*w.name
24行定义的指针p->name指向weapon_2数组第一个元素
26行的p++表示p已经指向下一个元素。
结构体 数组 指针运用
(* w). 指针变量引用成员,可用 -> 代替
结构体指针:
指向结构体变量的指针:
eg.
struct weapon * w;
w = &weapon;
printf("name=%s\n",(*w).name)//或w->name
3种调用成员变量的方法:
结构体变量名称.成员变量名
(*p).成员变量名
p->成员变量名
指针p=weapons;
struct weapon weapons[2]={{"name1",100,200},{"name2",100,200}};
printf("%s\n",p->name);//此时输出为weapons[0].name,即name1
p++;//指向了weapons[1]
结构体指针
struct weapon *w;
w=&weapon_1;
(*w).name表示指向结构体中的成员()不能省略,.的优先级大于*的优先级,w->name
*w表示指向结构体变量
结构体数组指针
struct weapon *p;
p=weapon_2;
p->name既是weapon_2[0].name
p++既是weapon_2+1,指向了weapon_2[1]
struct weapon weapon_2[2] = {{},{}}; // weapon_2 为 weapon 数组第一个元素的地址,故 struct weapon * p; p = weapon_2; p->name // 相当于weapon_2[0].name p++; // 则相当于 weapon_2[1].name
若要指向结构体中的任意一个变量,有如下四种方法:
e.g struct weapon weapon_1{"weapon name"}
weapon_1.name
struct weapon (*w); w =&weapon name; (*w).name;
struct weapon (*w); w =&weapon name; w->name;
struct weapon *p; p=weapon_2;(指针访问该数组第一个数据的位置)
因为结构体数组名本身就是指针地址 所以赋值给指针时 前面不用加&
结构体指针
指向结构体的指针e.g struct weapon *w;
w=&weapon_1;
printf("name=%s\n", (*w).name/w->name/weapon_1.name);
weapon_2既为一维数组(其中包含两个结构体各为两个数组中的元素),又为指向该数组中第一个元素的指针。
struct weapon * w;//声明一个指向struct weapon类型的指针变量
w=&weapon_1; //让w指向weapon_1
*w表示w指向的变量weapon_1;
(*w).name即是weapon_1.name,也可以w->name
struct weapon *p; //声明一个指向struct weapon变量的指针
p=weapon_2; //weapon_2是数组weapon_2[2];此处指向该数组的第一个也即weapon_2[0];
同样,也可以p->name或weapon_2[0].name;
若要指向第二个,p++;
访问结构体成员,用(*w).name还是w->name还是w.name都是可以地,C语言底层进行了屏蔽
初始化结构体成员:struct 名称 变量名 = {"字符数据",数据,数据....};
访问结构体成员:变量名.结构体成员
结构体数组,每个元素都是一个结构体类型的数据,每个结构体成员类型数量相同。
w->name 可以替代(*w).name
结构体指针