企业网站开发建设,出售企业网站备案资料,网站视频要vip怎么看,毕业设计图纸去哪里找大家好#xff0c;我是深鱼~ 目录
【前言】#xff1a;
一、结构体的声明
1.1结构的基本知识
1.2结构的声明
1.3结构体成员的类型
1.4结构体变量的定义和初始化
二、结构体成员的访问 【前言】#xff1a;本章来介绍结构体的部分知识#xff0c;并不会深入讲解… 大家好我是深鱼~ 目录
【前言】
一、结构体的声明
1.1结构的基本知识
1.2结构的声明
1.3结构体成员的类型
1.4结构体变量的定义和初始化
二、结构体成员的访问 【前言】本章来介绍结构体的部分知识并不会深入讲解只是初阶部分看得懂结构体的逻辑并且会简单的运用后期进阶部分还会深入讲解希望对大家有所帮助
一、结构体的声明
1.1结构的基本知识 结构是一些值的集合这些值称为成员变量结构的每一个成员可以是不同类型的变量 这就让我们想起来数组一组相同类型元素的集合
1.2结构的声明 struct tag //结构体关键字名字根据实际情况自己命名 { member-list; //成员变量的列表一个或多个 }variable-list //变量列表 为什么要出现结构体呢 当前学习过的类型都是内置类型egcharintshortdouble...但是如果我们想要用一个类型来创建一个复杂对象比如人继续要名字性别年龄电话地址...这时C语言就引进了结构体这个类型来创建复杂对象对于一个变量我们首先得有一个类型来创建这个变量然后再把值存入变量中去 假如我们要创建学生的变量 学生类型—— 学生的变量—— 学生的属性信息 代码实现
#includestdio.h
struct Stu
{//学生的相关的属性char name[20];int age;char sex[5];char tele[12];
}s3s4; //这里的s3s4是变量名
struct Stu s5; //这样创建全局变量也是可以的
int main()
{struct Stu s1; //注意这里类型是struct Stustruct是不可以省略的struct Stu s2;return 0;
}
上面一个创建了s1s2s3s4s5五个变量但是s1s2是局部变量s3s4s5是全局变量
如果我们想要简化变量的类型重命名
typedef struct Stu
{//学生的相关的属性char name[20];int age;char sex[5];char tele[12];
}Stu; //Stu是重命名产生的新的类型
int main()
{Stu s5;return 0;
}
typedef是类型重定义就是把类型的名字重命名
【注意】上一个代码中s3s4是变量名而这个代码中Stu是重命名产生的新类型
1.3结构体成员的类型 结构体成员可以是标量数组指针甚至可以是其他结构体 代码演示我们可以看到结构体成员还是比较丰富的
struct B
{char c;int i;
};
struct S
{char c;int num;int arr[10];double* pd;struct B sb;struct B* pb;
};
int main()
{return 0;
}
1.4结构体变量的定义和初始化 定义 全局变量的创建有两种 (1)直接在结构体声明分号之前的加上变量名 (2)在结构体声明结束后跟局部变量创建一样些但是不写在main函数中 初始化 1按照顺序初始化跟数组一样用{ }中间根据成员顺序输入进行初始化 2指定成员初始化这样就得加上成员的名称eg:.num1000其他没有初始化的部分默认为0 代码演示如下
struct B
{char c;int i;
};
struct S
{char c;int num;int arr[10];double* pd;struct B sb;struct B* pb;
}s1; //s1是全局变量第一种struct S s2;//s2是全局变量第二种int main()
{double d 3.14;//按照顺序初始化struct S s3 { q,100,{1,2,3},d,{a,1},NULL };//局部变量//指定成员来初始化struct S s4{.num1000,.arr{1,2,3,4,5}};return 0;
}
二、结构体成员的访问 ·结构体变量.成员名 ·结构体指针-成员名 代码演示【写一个函数给s存放数据】
#includestring.h
struct S
{char name[20];int age;
};
void set_s(struct S* ps)
{(*ps).age 18;strcpy((*ps).name, zhangsan);//字符串拷贝//(*ps).name zhangsan;这是错误的因为name是数组名数组名是地址常量
}
int main()
{struct S s { 0 };//写一个函数给s种存放数据set_s(s);return 0;
} 这里要注意两个点 1在name数组成员中存放数据的时候我们不能像age一样直接存放 因为name是数组名数组名是地址常量就相当于我们是把张三放到了一个门牌号上并没有放入房间里所以我们就用strcpy函数来存放数据 2在传参的时候不能直接传个过去而要把s的地址s传进去 实参传给形参的时候实参只是实参的一份临时拷贝对形参的修改不会影响实参 上面是用结构体变量.成员名这个方法来存放数据的
其实也可以这样指针直接指向成员名更好理解一点
ps-age18;
strcpy(ps-name,zhangsan);
下面再来【写一个函数打印s中的数据】这里传参直接传结构体变量s就可以只是打印不用带回main函数其实这里传地址也可以这其实也是更好的选择
struct S
{char name[20];int age;
};
void print_s(struct S t)
{printf(%s %d\n, t.name, t.age);
}
void set_s(struct S* ps)
{ps-age 18;strcpy(ps-name, zhangsan);//字符串拷贝
}
int main()
{struct S s { 0 };/*写一个函数给s种存放数据*/set_s(s);//写一个函数打印s中的数据print_s(s);return 0;
} 【总结】结构体传参的时候要传结构体的地址 1当传参时传的是变量时我们能做的事就很少因为形参只是实参是一份临时拷贝对形参进行操作并不改变实参但是直接传地址过去我们能干的就很多 2当我们传变量的时候拷贝一份实参也是需要空间的 而直接传地址直接对原参数进行操作不需要多余的空间大大提高了效率 这次结构体的内容就到此啦有什么问题欢迎评论区或者私信交流觉得笔者写的还可以或者自己有些许收获的麻烦铁汁们动动小手给俺来个一键三连万分感谢 !