保存c语言的结构体数据类型,C语言学习-struct结构体定义你自己的数据类型

前言:

在java中有类,内部封装的是一些相关联的数据,例如一个学生,有姓名,年龄,性别,班级,学校等等,这些数据组合到一起就构成了我们的类。而在C中,也可以定义这样一个‘类’(当然C语言中没有类这个概念),那就是结构体--struct,通过结构体把这些相关联的数据给组合起来。

如何定义一个结构体

struct Student{

char name[20];

int age;

char sex;

.....

}

可以看到,这与java定义一个类差不了多少,每个成员的命名规则与变量一样。

PS:

结构体中的成员同样也可以是结构体 例如:

struct Date {

int year;

int month;

};

struct Student{

char name[20];

struct Date date;

};

可以看到,这是不是像java的内部类?当然这里仅仅是个比喻,方便理解。

定义好一个结构体之后,如何来使用这个结构体呢?

结构体的初始化以及使用

#include "stdafx.h"

#include

using namespace std;

//声明结构体的同时进行变量声明和初始化

struct Date {

int year;

int month;

}date1 = {2017, 8};

//仅仅定义一个结构体

struct Student{

char name[20];

//struct Date date;

int age;

};

//定义结构体的同时声明结构体变量

struct Student1{

char name[20];

int age;

}student1, student2;

//声明一个结构体,成员含有另一个结构体

struct Student2 {

int age;

struct Date date;

};

//不指定类型名直接定义结构体

struct {

char name[20];

int age;

}man = {"11", 11};

int main()

{

//定义一个结构体变量,并初始化

Student student = {"张三", 11};

cout << student.age << endl;

cout << student.name << endl;

//为声明好的结构体变量初始化,在定义结构体时已经声明了

student1 = { "李四", 22 };

cout << student1.age << endl;

cout << student1.name << endl;

//为声明好的结构体变量初始化,在定义结构体时已经声明了

student2 = { "王五", 33 };

cout << student2.age << endl;

cout << student2.name << endl;

//初始化

Student2 student3 = { 44, date1 };

//如果结构体的成员也是一个结构体,那访问方式是一级级访问下去的

cout << student3.date.year << endl;

//没有结构体类型的变量man

cout << man.age << endl;

cout << man.name << endl;

cin.get();

return 0;

}

看上面代码可以清楚的了解到,大概有4种方式

1.仅仅只定义一个结构体,然后在方法中声明结构体变量并初始化;

2.定义结构体的同时,声明结构体变量,然后在方法中初始化;

3.定义结构体的同时,声明结构体变量并初始化;

4.定义一个结构体,但是不指定结构体类型,这种定义方式后面必须同时声明该结构体的变量,不然没有任何作用。

输出结果我这就不展示了,可以拿上面代码测测。或者自己动手敲敲便于理解。

使用方式: 结构体变量.成员 ,结构体成员就和普通的变量一样,可以对其操作 赋值算术运算等。

当然除此之外,还可以使用指针来访问,通过指向操作->或者是(*p).name,其中p是指向结构体变量的指针。

#include "stdafx.h"

#include

using namespace std;

struct Student {

char name[20];

int age;

};

int main() {

Student student = { "ljx", 20 };

Student *p = &student;

//(*p)返回student这个变量

cout << (*p).name << endl;

cout << (*p).age << endl;

//指针的指向操作

cout << p->name << endl;

cout << p->age << endl;

cin.get();

return 0;

}

如果不太理解的,可以看下我上篇关于指针的文章。

结构体数组

假如我们定义一个学生类型的结构体,一个班级上有40个学生,那就需要用数组把他们给整合起来,这样的数组就是结构体数组。

#include

using namespace std;

struct Student{

char name[20];

int age;

};

int main(){

Student student[3] = {{"zhangsan", 20}, {"lisi", 30}, {"wangwu", 40}};

//通过数组下表操作结构体数组

for(int i = 0; i < 3; i++){

cout<

cout<

}

//通过指针操作结构体数组

Student *p;

p = student;

for(p; p < student+3; p++){

cout<name<

cout<age<

}

return 0;

}

结构体基本就分析到这,当然还有一些没有讲解的,例如公用union 共用体结构,结构体变量所占用的内存长度是各个成员的内存长度之和,而共用体则是内部定义的成员从同一个地址开始的,这个相对而言用的较少,所以这里也就没有对其进行讲解。

PS:学会了结构体,那我们可以通过结构体来定义一个链表/双向链表/二叉树等都难不倒我们了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值