结构体 c++


前言

结构体的学习汇总,以及我对结构体理解。

结构体

`

一、结构体是什么?

结构体属于用户自定义的数据类型,允许用户储存不同类型数据。
你之前用的都是别人定义的类型,学了结构体可以你自己来定义,提高了代码的维护效率。

二、结构体的定义和使用

1.结构体定义

语法结构: struct 结构体名{定义的成员列表};
用结构体创建变量的方法

  1. struct 结构体名 变量名
  2. struct 结构体名 变量名 ={1号成员变量;2号成员变量…}
  3. 创建结构体顺便创建变量
    代码如下(示例):
#include<bits/stdc++.h>
using namespace std;
struct student 
{
	//成员创建
	string name;
	int age;
	int score;
}stu3;//第三种方式               看这里第三种  看这里第三种  看这里第三种 
int main(){
	//第一种方式 
    struct student stu1;//在c++里struct可以省略,正能在main函数里面省略
    stu1.name="afana";
    stu1.age=19;
    stu1.score=100;
    cout<<"名字:"<<stu1.name<<"   年龄:"<<stu1.age<<"   分数:"<< stu1.score<<endl;
    
    //第二种方式
	student stu2={"ayuana",18,100}; 
	cout<<"名字:"<<stu2.name<<"   年龄:"<<stu2.age<<"   分数:"<< stu2.score<<endl; //想比与string name.1="ayuana";int age.1;int score.1;要更加的快捷e 
    //第三种很容易被忽略,减低代码的可读性,自定义结构体的}后面直接定义stu3 
    stu3.name="azhuoa";
    stu3.age=10;
    stu3.score=90;
    cout<<"名字:"<<stu3.name<<"   年龄:"<<stu3.age<<"   分数:"<< stu3.score<<endl; 
	return 0;
}

2.结构体数组

作用:方便后期的维护
创建方法: struct student ={ {},{},{},{}…};
代码如下(示例):

#include<bits/stdc++.h>
using namespace std;
struct student 
{
	//成员创建
	string name;
	int age;
	int score;
};            
int main(){
	struct student arr[3]=
	{
		{"afana",19,100},
		{"ayauna",18,100},
		{"azhuoa",10,90}
	};                      //和数组一样  a[3]={1,2,3};
	for(int i=0;i<3;i++){
		cout<<"名字:"<< arr[i].name<<"   年龄:"<<arr[i].age<<"   分数:"<< arr[i].score<<endl;
	}
	return 0;
}

3.结构体指针

作用:通过指针访问结构体成员
访问方法
1.定义指针
2.通过->符号访问`

#include<bits/stdc++.h>
using namespace std;
struct student 
{
	//成员创建
	string name;
	int age;
	int score;
};             
int main(){
	struct student stu=	{"afana",19,100}; 
	struct student * p= &stu;//把stu的地址赋值给指针 
	                    

		cout<<"名字:"<< p->name<<"   年龄:"<< p->age<<"   分数:"<< p->score<<endl;
	return 0;
}

4.结构体的嵌套

作用:把成员定义为结构体 (自我感觉是提高了结构体的容量,像俄罗斯套娃一样)

#include<bits/stdc++.h>
using namespace std;
struct student 
{
	//成员创建
	string name;
	int age;
	int score;
};         
struct teacher
{
	//成员创建
	int id;//老师的职工号 
	string name;
	int age;
	struct student stu;//跟老师学习的学生,在teacher结构体中嵌套了student结构体 
};             
int main(){
	struct teacher s; 
	s.id=1001;
	s.age =27;
	s.name="he";
	s.stu.name="afana";
	s.stu.age=19;
	s.stu.score=100;
	 
	    cout<<"老师id:"<<s.id<<"   年龄:"<< s.age<<"   老师名字"<< s.name<<endl; 
		cout<<"学生名字:"<< s.stu.name<<"   年龄:"<< s.stu.age<<"   分数:"<< s.stu.score<<endl;
	return 0;
}

5.结构体做函数参数

作用:提高编码效率
/ /地址传递更加节省内存

#include<bits/stdc++.h>
using namespace std;
struct student 
{
	//成员创建
	string name;
	int age;
	int score;
};         
void printf(struct student stu)
{
	stu.age=119;//局部变量 
	cout<<"名字:"<<stu.name<<"   年龄:"<<stu.age<<"   分数:"<< stu.score<<endl;
};     
void printf2(struct student stu)
{
	cout<<"名字:"<<stu.name<<"   年龄:"<<stu.age<<"   分数:"<< stu.score<<endl;
};    
void printf3(struct student * p)//传入的参数类型要相同 
{
	cout<<"名字:"<<p->name<<"   年龄:"<<p->age<<"   分数:"<< p->score<<endl;
};          
int main(){
	struct student stu; 
	
	stu.name="afana";
	stu.age=19;
	stu.score=100;
	 printf(stu);//值传递 ,不改变全局变量的值 ,peintf函数中定义年龄为119岁,但main函数中奈年龄变 
	 printf2(stu);
	    printf3(&stu);//地址传递 , 会改变全局变量 
	    cout<<"main"<<"名字:"<<stu.name<<"   年龄:"<<stu.age<<"   分数:"<< stu.score<<endl;
	return 0;
}

6.结构体+const

作用:提高代码的安全性和保密性
值传递不会改变实参,但地址传递会改变,为了防止数据被胡乱修改,将结构体和const结合起来使用
//值传递相当于把数据拷贝了一份过去,所以不会改变原来的数据,拷贝的数据和原数据分开,怎么乱来都不会修改数据
/ /地址传递更加节省内存,指针只会占4个字节

#include<bits/stdc++.h>
using namespace std;
struct student 
{
	//成员创建
	string name;
	int age;
	int score;
};         
void printf1(struct student * p)//传入的参数类型要相同 
{	
	p->age=150;
	cout<<"名字:"<<p->name<<"   年龄:"<<p->age<<"   分数:"<< p->score<<endl;
};     
void printf2(const student * p)//这样加了const后就不会被修改了,因为被修改会报错 
{	
	//p->age=150;不信把这个加上试试
	cout<<"名字:"<<p->name<<"   年龄:"<<p->age<<"   分数:"<< p->score<<endl;
}; 
int main(){
	struct student stu=	{"afana",19,100}; 
	struct student * p= &stu;//把stu的地址赋值给指针    
	    printf2(p);
		printf1(p);
		cout<<"名字:"<< p->name<<"   年龄:"<< p->age<<"   分数:"<< p->score<<endl;
		
	return 0;
}

总结

学会了结构体就可以试试写一个,学生信息管理系统了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值