首页 > 程序开发 > 软件开发 > C语言 >

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

2017-08-18

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

前言:

在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<name<age<



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

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

相关文章
最新文章
热点推荐