结构体有关知识

结构体

结构体的定义和使用
(1)结构体基本概念:
结构体属于用户自定义的数据类型,允许用户存储不同数据类型。
语法:struct 结构体名{ 结构体成员列表};

通过结构体创建变量的方法:
struct 结构体名 变量名
struct 结构体名 变量名={成员1,成员2…};
定义结构体时顺便创建变量

例如我们想创建一个学生的结构体:
使用第一种方法:struct 结构体名 变量名 在c++中创建变量时的struct可以省略,但是刚开始定义结构体时的struct不可省略

#include <iostream>

using namespace std;

struct student
{
    int age;
    string name;
    int score;
    int num;
};

int main()
{
   student S;//通过学生类创建具体学生,struct可以省略
   S.age=18;//使用 . 来访问属性
   S.name="Tony";
   S.num=123456;
   S.score=60;//给S赋值
   cout<<"学生姓名为"<<S.name<<"年龄"<<S.age<<"电话号"<<S.num<<"成绩"<<S.score<<endl;

}

第二种方法:
struct 结构体名 变量名={成员1,成员2…};

#include <iostream>

using namespace std;

struct student
{
    int age;
    string name;
    int score;
    int num;
};

int main()
{
   student S2{18,"Tony",60,123456};//按照上面定义的顺序赋值
   cout<<"学生姓名为"<<S2.name<<"年龄"<<S2.age<<"电话号"<<S2.num<<"成绩"<<S2.score<<endl;
}

第三种方法:
定义结构体时顺便创建变量

#include <iostream>

using namespace std;

struct student
{
    int age;
    string name;
    int score;
    int num;
}S3;//结构体创建完后顺便创建变量

int main()
{
   S3.age=18;//使用 . 来访问属性
   S3.name="Tony";
   S3.num=123456;
   S3.score=60;//给S赋值
   cout<<"学生姓名为"<<S3.name<<"年龄"<<S3.age<<"电话号"<<S3.num<<"成绩"<<S3.score<<endl;
}

结构体数组
作用:将自定义的结构体放入到数组中方便维护
语法:struct 结构体名 数组名[元素个数]={ {},{},… }

#include <iostream>

using namespace std;

struct student//定义结构体
{
    int age;
    string name;
    int score;
};

int main()
{
   student arr[3]=
   {
        {18,"Taony",80},
        {12,"Tsony",44},
        {14,"Tcony",98}

   };//创建结构体数组
   
   arr[1].age=166;
   arr[1].name="zeyuan";
   arr[1].score=100;//修改数据;
   
   int len=sizeof(arr)/sizeof(arr[0]);
   for(int i=0;i<len;i++)//遍历结构体
   {
       cout<<arr[i].age<<endl;
       cout<<arr[i].name<<endl;
       cout<<arr[i].score<<endl;
   }
}

结构体指针
作用:通过指针来访问结构体中的成员

#include <iostream>

using namespace std;

struct student//定义结构体
{
    int age;
    string name;
    int score;
};

int main()
{
  student s1{18,"Tony",90};
  student *p=&s1;//s1是属于student的结构体  所以定义指针p的时候应该也是student修饰
                  //通过指针指向结构体变量

cout<<"年龄为"<<p->age<<endl;//利用操作符 -> 可以通过结构体指针来访问结构体属性
cout<<"姓名为"<<p->name<<endl;
cout<<"成绩为"<<p->score<<endl;

}

结构体嵌套结构体
作用:结构体成员中可以有另一个结构体
这在学习数据结构中会经常使用

#include <iostream>

using namespace std;

struct student//定义学生结构体
{
    int age;//学生年龄
    string name;//学生姓名
    int score;//学生分数
};
struct teacher//定义老师结构体
{
    int age;//老师年龄
    string name;//老师姓名
    struct student s1;//老师带的学生s1
};
//注意学生应该定义在老师的前面
int main()
{
    teacher t1;
    t1.age=30;
    t1.name="laowang";
    t1.s1.age=18;   //老师结构体中的s1也是属于student的结构体 需要赋值
    t1.s1.name="Tony";
    t1.s1.score=100;
cout<<"老师姓名为"<<t1.name<<endl;
cout<<"老师年龄为"<<t1.age<<endl;
cout<<"老师教的学生的姓名为"<<t1.s1.name<<endl;
cout<<"老师教的学生的年龄为"<<t1.s1.age<<endl;
cout<<"老师教的学生的成绩为"<<t1.s1.score<<endl;

}

结构体作函数参数
前面文章中指针中可以实现地址传递,即可以改变实参的值。

#include <iostream>

using namespace std;

struct student//定义学生结构体
{
    int age;//学生年龄
    string name;//学生姓名
    int score;//学生分数
};
//值传递
void printstudent(student s)
{
    cout<<"值传递中姓名"<<s.name<<"年龄"<<s.age<<"分数"<<s.score<<endl;
}
//地址传递

 void printstudent1(student *p)//用指针去接收一个地址
 {
     p->age=100;
     cout<<"地址传递中姓名"<<p->name<<"年龄"<<p->age<<"分数"<<p->score<<endl;
 }
int main()
{
    student s1;//创建结构体变量
    //现在要把学生传到一个参数里打印学生的所有信息
    s1.age=18;
    s1.name="Tony";
    s1.score=100;
  cout<<"main中姓名"<<s1.name<<"年龄"<<s1.age<<"分数"<<s1.score<<endl;
 // printstudent(s1);
   printstudent1(&s1);//地址:&

}

地址传递 形参改变后实参的值也改变 以上代码中年龄改为100 后main函数中的年龄和printstudent1函数中的年龄都为100.

结构体中的const的使用场景
上一个代码说到地址传递可以修改实参的值,为了防止修改实参的值 可以在student s前面加上一个const来防止误操作

#include <iostream>

using namespace std;

struct student//定义学生结构体
{
    int age;//学生年龄
    string name;//学生姓名
    int score;//学生分数
};

void println(const student *s)
{
    //s->score=60; 
    cout<<"姓名"<<s->name<<"年龄"<<s->age<<"分数"<<s->score<<endl;
}

int main()
{

    student s1;//创建结构体变量
    s1.age=18;
    s1.name="Tony";
    s1.score=100;
    //通过函数打印信息:
    println(&s1);


}

如果println函数中s->score=60解除注释并运行可以得到
在这里插入图片描述
说明读是可以的,数据是不可以修改的。一旦有误操作就会报错。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值