概述
结构体的一般规范形式为:
Struct tag
{
member - list;
}variable - list;
int main()
{
struct tag s1; // ①
}
其中,Struct是结构体关键字,tag是结构体标签,Struct tag合起来叫做结构体类型
声明成功好了结构体类型后,用一个大括号括起来,然后在大括号里面定义结构体标签的变量,即这个结构体标签具有的属性,如结构体标签是学生,那么我给它定义的变量就有学生的性别sex,手机号码telphone,学生的名字name等等。定义完成变量之后,在大括号后面可以创建全局变量,即结构体变量,如将variable-list换成s1,s2,s3等等,即可定义全局变量s1,s2,s3等等。
例;
Struct stu
{
char name[10];
char sex[4];
int tel[12];
short age;
}s1, s2, s3;
定义完成结构体类型之后,即可在接下来的函数中使用,如第①步,创建结构体类型,s1在这里是局部变量,仅能在函数范围内使用,一般我们尽量还是使用局部变量比较好,全局变量尽量少设置。
如果想将结构体类型名转换一下,如我想将Struct tag这个结构体类型名换成Stu,此时则需要使用到typedef关键字
例:源代码:
typedef Struct tag
{
member - list;
}Stu;
int main()
{
Struct tag s2;
Stu s1; //②
}
如第②步。此时既可以使用struct tag去定义一个结构体变量s2,也可以使用Stu去定义一个s1结构体变量。
结构体类型中还可以定义其他结构体类型,使用方式是用一个大括号{}括起来,然后挨个在大括号内赋值另外一个结构体内定义的变量。
如:源程序
#include <stdio.h>
struct stu
{
short age;
int tele[12];
char sex[4];
char name[10];
};
struct tag
{
char name1[10];
char sex[4];
struct stu s;
int tele1[12];
};
int main()
{
struct tag s1 = { "张三","男",{15,15997595853,'男','李四'},13527781462 };
}
想要对结构体内部的变量进行引用的话需要使用int main内定义的结构体变量假如是s1,那么就是s1.加上定义s1的结构体内的变量,例如;
源代码:
#include <stdio.h>
struct stu
{
short age;
int tele;
char sex[4];
char arr[22];
};
struct tag
{
char name1[10];
char sex[4];
struct stu s;
int tele1;
char* pa;
};
void main()
{
char arr[] = "hello world";
struct tag s1 = { "张三","男",{15,15997595853,"男","hello world"},13527781462,arr};
printf("%dn", s1.s.age);
printf("%sn", s1.s.arr);
printf("%sn", s1.name1);
printf("%sn", s1.sex);
printf("%sn", s1.pa);
}
想要通过函数的方式引用结构体内部的变量以此得到它们的值时,可以通过传值调用,也可以通过传址调用。如果是传址调用,则需要使用函数定义接收结构体变量的指针变量通过->箭头加上变量名引用,如果是传值调用,则只需要通过函数接受结构体变量的变量加一个小数点.再加上结构体变量即可;例如以下代码的红色字体内容;
源代码:
#include <stdio.h>
struct tag
{
char name1[10];
char sex[4];
char tele1[12];
char* pa;
};
void print(struct tag tmp)
{
printf("name: %sn", tmp.name1);
printf("sex: %sn", tmp.sex);
printf("tele1: %sn", tmp.tele1);
}
void print(struct tag* ps)
{
printf("name: %sn", ps->name1);
printf("sex: %sn", ps->sex);
printf("tele1: %sn", ps->tele1);
}
void main()
{
char arr[] = "hello world";
struct tag s1 = { "张三","男","13527781462",arr};
print(s1);
print(&s1);
}
一般建议使用传址调用,因为如果一旦创建的结构体变量s1的内容过大,它需要的内存空间就多,如果是通过传值调用的方式,则还需要同时拷贝一份跟着分空间大小一摸一样的内存空间,这就造成了空间浪费,而如果是传址调用的话,就仅仅只需要传输一个s1的首地址,这样就可以很大程度上的节约内存空间,防止浪费。
最后
以上就是机智火龙果为你收集整理的C语言自学篇:结构体的理解的全部内容,希望文章能够帮你解决C语言自学篇:结构体的理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复