首页 / C语言 / C语言到C++的进化之路(九)结构体
C语言到C++的进化之路(九)结构体
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C语言到C++的进化之路(九)结构体,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4987字,纯文字阅读大概需要8分钟。
内容图文
结构体(structure)
在C语言中,我们是用结构体来存放一组类型不一样的数据。例如一个模特有身高(int)、姓名(char)、性别(bool)等。这个时候就需要用到结构体了。
1.结构体的声明
struct 结构体名
{
结构体成员变量1;
结构体成员变量2;
······
};
示例:
struct person
{
int height; //身高
char name[20]; //姓名
char address[50]; //地址
bool gender; //性别,1为男,2为女
};
注意:大括号后面的分号(;)不能忘
结构体是程序员自己定义的数据类型,可以包含多个其他类型的数据,也可以包含其他结构体,也可以包含指向自己的结构体指针(通常指向下一个结构体)。而这种结构体指针是为了实现一些比较高级的数据结构,链表和树等。
2.结构体变量的定义
结构体是一种程序员自定义的数据类型,可以用它来定义变量,例如:
1.先声明后定义
struct person
{
int height; //身高
char name[20]; //姓名
char address[50]; //地址
bool gender; //性别,1为男,2为女
};
struct person studet;
struct person teacher;
struct person doctor;
上述代码就定义了三种变量,学生student,老师teacher,医生doctor。
2.声明的时候定义
struct person
{
int height; //身高
char name[20]; //姓名
char address[50]; //地址
bool gender; //性别,1为男,2为女
}student,teacher,doctor;
3.结构体占用内存的情况
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
struct person
{
int height; //身高
char name[20]; //姓名
char address[50]; //地址
bool gender; //性别,1为男,2为女
};
/*
*
*
*/
int main()
{
struct person student;
struct person teacher;
struct person doctor;
printf("sizeof(person) is%d\n",sizeof(student));
}
运行结果:
sizeof(person) is76
因为bool类型在内存中占据1个字节。这说明结构体各个成员变量之间存在“缝隙”,并不是连续的存储在一片内存中的。C语言也提供了结构体成员之间内存对齐的方法,但是我们在这里就不过多介绍了,请读者自行查阅。
4.结构体初始化
采用memset函数进行初始化,对结构体变量的值清零。
memset(&student,0,sizeof(student)); //注意要是用取值地府,因为结构体变量名不能表示其地址。
5.成员变量的访问和使用
1.使用.来访问结构体中的成员变量
student.height=150;
scanf("%s",student.name);
struct person student;
struct person* p=&student;
(*p).height=182; //(*p)前后的括号不能少
strcpy((*P).name,"zunnajim);
2.使用->来访问(只能指针)
struct person student;
struct person* p=&student;
p->height=180;
strcpy(p->name,"zunnajim');
6.结构体数组
结构体变量可以被定义为数组,本质上与其他类型的数组变量没什么区别。
struct person master[10];
memset(master,0,sizeof(master));
strcpy(master[0].name,"zunnajim");
master[0].height=170;
7.结构体指针
struct person student;
struct person* p=&student;
(*p).height=182;
strcpy((*P).name,"zunnajim);
8.结构体的复制
在C语言中,结构体的成员变量如果是基本数据类型(int,char,double)可以用=来赋值,如果是字符串,可以用strcpy函数来赋值。
如果把结构体变量的值赋给另一个结构体变量中,有两种办法。
1.逐个赋值
逐个赋值就是把一个结构体变量的成员一个一个赋给另一个结构体的成员变量中,这种方式比较复杂,而且耗时。
2.内存拷贝
另一种办法就是内存拷贝,C语言提供了memcpy(memory copy)函数来实现内存的拷贝。
函数声明:
void *memcpy(void *dest,const void *src,size_t n);
/*参数说明
*src:源内存变量的起始地址
*dest:目的内存变量的起始地址
*n:需要复制的字节数
*/
示例:
/*******************************************************
* Author : ZUNNAJIM
* Last modified: 2020-11-22 02:33
* Email : 2802999307@qq.com
* blog : https://blog.csdn.net/weixin_45859425
* Filename : copy.c
* Description : This file is for copy methods for structure;
* *****************************************************/
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
struct person
{
int age;
double height;
char name[20];
}student;
int main()
{
memset(&student,1,sizeof(student));
student.age=20;
student.height=180;
strcpy(student.name,"zunnajim");
printf("sizeof(student)=%d\n\n",sizeof(student));
struct person student2;
memcpy(&student2,&student,sizeof(student));
printf("student2.age=%d\n",student2.age);
printf("student2.height=%lf\n",student2.height);
printf("student2.name=%s\n",student2.name);
printf("sizeof(student2)=%d\n\n",sizeof(student2));
}
运行结果:
sizeof(student)=40
student2.age=20
student2.height=180.000000
student2.name=zunnajim
sizeof(student2)=40
9.结构体作为函数的参数
结构体是多个变量的集合,作为函数的参数时就可以传递整个集合,也就是所有成员。如果结构体成员较多,影响程序的运行效率,所以最好的办法就是传递结构体的地址。
示例:
/*******************************************************
* Author : ZUNNAJIM
* Last modified: 2020-11-22 20:37
* Email : 2802999307@qq.com
* blog : https://blog.csdn.net/weixin_45859425
* Filename : parameter.c
* Description :
* *****************************************************/
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
struct person
{
int age;
double height;
char name[20];
}student;
void set_value(struct person *ptr)
{
ptr->age=20;
ptr->height=180;
strcpy(ptr->name,"zunnajim");
}
int main()
{
memset(&student,0,sizeof(student));
set_value(&student);
printf("student.age=%d student.height=%f student.name=%s\n",student.age,student.height,student.name);
}
运行结果:
student.age=20 student.height=180.000000 student.name=zunnajim
内容总结
以上是互联网集市为您收集整理的C语言到C++的进化之路(九)结构体全部内容,希望文章能够帮你解决C语言到C++的进化之路(九)结构体所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。