自定义数据类型(结构体)

自定义数据类型(结构体)

//struct + 结构体名称

例如:

struct Student

{

char name[20];

int age;

//struct Student*p;可以定义一个包含自身的指针

//struct Student h//error  不可以定义一个包含自身的指针

}

//自定义数据类型,定义完成后,其和内置类型一样使用。

//比如和 int a; int arr[10]; int *p; char *p; 一样使用

//因为聚合类型中未初始化的为0;所以age未初始化给值时默认值为0

 

我们现在定义一个 名字为“张飞”,年龄为21岁的Student stu1

struct Student stu1={"zhangfei",21};

现在我们突然发现名字和年龄登记错了,其实是“关羽”,年龄为32岁。

我们怎么访问到结构体变量中呢:

******结构体中普通变量可以通过 ” . ” 来访问它的成员******

struct Student stu1={"zhangfei",21};

stu1.age=32//访问stu1age成员并将其改为32

因为名字是字符串,所以我们得用strcpy库函数来拷贝

strcpy(stu1.name,"guanyu");

 

******结构体中指针变量可以通过 ” -> ” 来访问它的成员******

struct Student *stu1={"zhangfei",21};

stu1->age=32;

修改名字和上面一样,得用strcpy库函数来拷贝

strcpy(stu1->name,"guanyu");

//因为在C语言中,自带解引用的符号有两个,“[]”和“->”。

//所以   stu1 -> name = (*stu1) . name

//输出时,我们有3种方法,一种直接printf,一种用参数列表为普通变量Show输出函数,一种用参数列表为指针变量Show输出函数,我们比较一下优略。

①:

我们直接用printf输出一下“张飞”,21岁看看:

  

我们将名字改成“关羽”,年龄改成32岁:

改岁数容易想到 stu1.age=36

而改名字得用到拷贝函数strcpy了,而不是stu1.name=”guanyu”//整体赋值只有一次机会

我们输出看看:

 


②:

这时候,我们改试着用参数列表为普通变量Show输出函数内修改,且主函数再输出一遍,看看修改成功了没:


 

你会发现,子函数修改好后不会影响到主函数。

③:

现在我们试着用参数列表为指针变量Show输出函数内修改,且主函数再输出一遍,看看修改成功了没:


 

我们会发现,子函数修改好后会影响到主函数,将主函数也修改。

 

综合来看,我们平时输出结构体时,最好直接printf输出或者用参数为指针的输出函数。

猜你喜欢

转载自blog.csdn.net/it_quanwudi/article/details/80504121