一、首先我们来了解关于结构体以及结构体数组的概念。
自定义结构体:
struct weapon{
char name[20];
int atk;
int price;
};
它是"weapon"型(类似于我们熟知的int型,String型等),里面有一个char类型,两个int类型。
如何给这个结构体赋值以及访问里面的属性?
struct weapon weapon_1 = {"weapon_name",100,200};
printf("%s\n,%d\n",weapon_1.name,++weapon_1.price);
"weapon weapon_1"表示我们实例化了weapon类型的一个具体的对象,我们给它起名为“weapon_1”(类型于int a),并且我们给“weapon_1”赋了三个值{"weapon_name",100,200},这三个值分别对应结构体里的char name[20],int atk,int price。
完整代码如下:
#include
struct weapon{
char name[20];
int atk;
int price;
};
int main()
{
struct weapon weapon_1 = {"weapon_name",100,200};
printf("%s\n,%d\n",weapon_1.name,++weapon_1.price);
return 0;
}
运行结果:
什么是结构体数组?
struct weapon weapon_2[2] = {{"weapon_name1",50,100},{"weapon_name2",100,200}};
printf("%s %d\n",weapon_2[0].name,weapon_2[1].atk);
struct weapon weapon_2[2]中[2]表示这个数组的大小是2。
完整代码如下:
#include
struct weapon{
char name[20];
int atk;
int price;
};
int main()
{
struct weapon weapon_1 = {"weapon_name",100,200};
printf("%s %d\n",weapon_1.name,++weapon_1.price);
struct weapon weapon_2[2] = {{"weapon_name1",50,100},{"weapon_name2",100,200}};
printf("%s %d\n",weapon_2[0].name,weapon_2[1].atk);
return 0;
}
运行结果:
二、指向结构体变量的指针变量
先上代码:
struct weapon weapon_1 = {"weapon_name",100,200};
printf("%s %d\n",weapon_1.name,++weapon_1.price);
struct weapon * w;
w = &weapon_1;
printf("name = %s name = %s\n",(*w).name,w->name);//w->name weapon_1.name
首先我们先定义一个指向weapon类型的指针变量w,然后让w指向weapon_1,现在我们可以通过指向结构体变量的指针w去访问weapon_1。
值得注意的是(*w).name可简写成w->name,它们都表示weapon_1.name。
完整代码如下:
#include
struct weapon{
char name[20];
int atk;
int price;
};
int main()
{
struct weapon weapon_1 = {"weapon_name",100,200};
printf("%s %d\n",weapon_1.name,++weapon_1.price);
struct weapon * w;
w = &weapon_1;
printf("name = %s name = %s\n",(*w).name,w->name);//w->name weapon_1.name
return 0;
}
运行结果:
那么结构体数组呢?
struct weapon weapon_2[2] = {{"weapon_name1",50,100},{"weapon_name2",100,200}};
printf("%s %d\n",weapon_2[0].name,weapon_2[1].atk);
struct weapon * p;
p = weapon_2;//p->name weapon_2[0].name
printf("%s\n",p->name);
p++;//weapon_2 +1 weapon_2[1]
printf("%s\n",p->name);
可以注意到,“p = weapon_2”中不加“&”。“p = weapon_2”此时表示的是指针p指向的是weapon_2数组第一个元素的起始地址。
如果我们输出p->name,实际它表示的是weapon_2[0].name。
如果想访问weapon_2数组中第二个元素的name成员,应该如何操作?
我们可以将p进行一个 ++的操作,则可以访问weapon_2[1].name。
完整代码如下:
#include
struct weapon{
char name[20];
int atk;
int price;
};
int main()
{
struct weapon weapon_2[2] = {{"weapon_name1",50,100},{"weapon_name2",100,200}};
printf("%s %d\n",weapon_2[0].name,weapon_2[1].atk);
struct weapon * p;
p = weapon_2;//p->name weapon_2[0].name
printf("%s\n",p->name);
p++;//weapon_2 +1 weapon_2[1]
printf("%s\n",p->name);
return 0;
}
运行结果: