C++入門到理解階段二基礎篇(9)——C++結構體

1.概述

前面咱們已經瞭解到c++內置了經常使用的數據類型,好比int、long、double等,可是若是咱們要定義一個學生這樣的數據類型,c++是沒有的,此時就要用到結構體,換言之經過結構體能夠幫咱們定義本身的數據類型。ios

2.結構定義和使用

格式 struct 結構體名{//成員列表};c++

好比定義一個學生類型結構體數組

struct Student
{
	string name;
	int age;

};

上面定義好了學生這種數據類型,那如何建立一個Student類型的數據呢?有如下三種方式,推薦一二種app

第一種函數

#include <iostream>
#include <string>
using namespace std;
struct Student
{
	string name;
	int age;

};
int main() {
	//第一種,建立並賦值
	Student s1;
	s1.name = "張三";
	s1.age = 12;
	cout << s1.age << s1.name;
}

第二種spa

#include <iostream>
#include <string>
using namespace std;
struct Student
{
	string name;
	int age;

};
int main() {
	//第二種
	struct Student s1 = {"李四",12};

	cout << s1.age << s1.name;
}

第三種指針

#include <iostream>
#include <string>
using namespace std;
struct Student
{
	string name;
	int age;

}s1;
int main() {
	s1.age = 12;
	s1.name = "lisi";
	cout << s1.age << s1.name;
}

3.結構體數組

#include <iostream>
#include <string>
using namespace std;
//1.定義一個student結構體
struct student
{
	string name;
	int age;

};


int main() {
	//2.定義結構體數組
	struct student arr[3] =
	{
		{"aaa",12},
		{"bbb",12},
		{"ccc",12}
	};
	//3.結構體變量賦值
	arr[2].age = 20;
	arr[2].name = "ddd";
	//4.訪問結構體數組
	for (int i = 0; i < 3; i++) {
		cout << arr[i].age << arr[i].name <<endl;
	}
}

4.結構體指針

#include <iostream>
#include <string>
using namespace std;
//1.定義一個student結構體
struct student
{
	string name;
	int age;

};


int main() {
	
	struct student s = { "lisi",12 };
	//2.定義一個結構體指針
	struct student* p = &s;
	//4.使用結構體指針訪問結構體中的屬性,須要使用->
	cout << p->age << p->name;
	
}

5.嵌套結構體

#include <iostream>
#include <string>
using namespace std;
//1.定義一個student結構體
struct student
{
	string name;
	int id;
};
//2.定義一個嵌套結構體
struct school {
	string name;
	int id;
	struct student s;
};
int main() {
	//3.建立school變量
	school sc = {};
	sc.id = 1;
	sc.name = "清華";
	sc.s.id = 2;
	sc.s.name = "lisi";
	cout << sc.id << sc.name << sc.s.id << sc.s.name << endl;
}

6.結構體做爲函數參數傳遞

第一種做爲值傳遞(不會修改實參)code

#include <iostream>
#include <string>
using namespace std;
//1.定義一個student結構體
struct student
{
	string name;
	int id;
};
void p(struct student s);
int main() {
	struct student s = { "lisi",10 };
	p(s);
	cout << "id:" << s.id <<"姓名:"<< s.name<<endl;//id:10姓名:lisi
	return 0;
}
//2.定義一個函數
void p(struct student s) {
	s.id = 100;
	cout << "id:" << s.id <<"姓名:" << s.name << endl;//id:100姓名:lisi
}

 

第二種做爲地址傳遞(會修改實參)blog

#include <iostream>
#include <string>
using namespace std;
struct student
{
	string name;
	int id;
};
void p(struct student *s);
int main() {
	struct student s = { "lisi",10 };
	p(&s);
	cout << "id:" << s.id <<"姓名:"<< s.name<<endl;//id:100姓名:lisi
	return 0;
}
void p(struct student *s) {
	s->id = 100;
	cout << "id:" << s->id <<"姓名:" << s->name << endl;//id:100姓名:lisi
}

注意:ip

//使用地址傳遞能夠避免大量變量賦值佔用空間的問題,提升效率,可是會修改實參,如何解決?
void p(const struct student* s) {//使用const修飾以後,對於地址傳遞,只會讀不會修改數據
	//s->id = 100;將不能修改
	cout << "id:" << s->id << "姓名:" << s->name << endl;//id:100姓名:lisi
}



相關文章
相關標籤/搜索