c语言结构体指针变量默认值,结构体的初始化和引用及指向结构体变量的指针变量(C语言)...

一、首先我们来了解关于结构体以及结构体数组的概念。

自定义结构体:

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;

}

运行结果:

c语言结构体指针变量默认值,结构体的初始化和引用及指向结构体变量的指针变量(C语言)..._第1张图片

什么是结构体数组?

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;

}

运行结果:

c语言结构体指针变量默认值,结构体的初始化和引用及指向结构体变量的指针变量(C语言)..._第2张图片

二、指向结构体变量的指针变量

先上代码:

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;

}

运行结果:

c语言结构体指针变量默认值,结构体的初始化和引用及指向结构体变量的指针变量(C语言)..._第3张图片

那么结构体数组呢?

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;

}

运行结果:

c语言结构体指针变量默认值,结构体的初始化和引用及指向结构体变量的指针变量(C语言)..._第4张图片

你可能感兴趣的:(c语言结构体指针变量默认值)