1

C++数据结构

C++数据结构

C/C++数组允许定义可存储相同类型数据项的变量,但是结构体是C++中另外一种用户自定义的可用的数据类型,它允许存储不同类型的数据项。
结构用于表示一条记录,假设要跟踪图书馆书本的动态,可能需要跟踪每本书的下列属性:

  • Title

  • Author

  • Subject

  • BookID

  • 定义结构体
    为了定义结构体,必须使用struct语句。struct语句定义了一个包含多个成员的新的数据类型,struct语句的格式如下:

struct [struct tag]{
  member definition;
  member definition;
  ...
  member definition;

}[one or more structure variable];

struct tag是可选的,每个member definition是标准的变量定义比如int i;或float f;或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,可以指定一个或多个变量,这是可选的。

实例:

struct Books{
  char title[50];
  char author[50];
  char subject[100];
  int book_id;
}book;
  • 访问结构体成员
    为了访问结构体的成员,使用成员访问运算符(.)。成员访问运算符是结构变量名称和我们要访问的结构成员直接的一个句号。可以使用struct关键字来定义结构类型的变量。

实例:

#include<iostream>
using namespace std;
struct Books{
	char title[50];
	char author[50];
	char subject[100];
	int book_id;
	
};

int main(){
	struct Books Book1;//声明Book1,类型为Book1
	struct Books Book2;//声明Book2,类型为Book2
	strcpy(Book1.title, "C++ Learning");
	strcpy(Book1.author, " Bjarne Stroustrup");
	strcpy(Book1.subject, "C++ language");
	Book1.book_id = 123456;
	
	strcpy(Book2.title, "Telecom Billing");
	strcpy(Book2.author, "Yakit Singha");
	strcpy(Book2.subject, "Telecom");
	Book2.book_id = 98765;
	
	//输出Book1信息
	cout<<"Book1 title:"<<Book1.title<<endl;
	cout<<"Book1 author:"<<Book1.author<<endl;
	cout<<"Book1 subject:"<<Book1.subject<<endl;
	cout<<"Book1 book id:"<<Book1.book_id<<endl;
	
	//输出Book2信息
	cout<<"Book2 title:"<<Book2.title<<endl;
	cout<<"Book2 author:"<<Book2.author<<endl;
	cout<<"Book2 subject:"<<Book2.subject<<endl;
	cout<<"Book2 book id:"<<Book2.book_id<<endl;
	return 0;
	
}

结果显示:

  • 结构体作为函数参数
    可以把结构体作为函数参数,传参方式与其他类型的变量或指针类似。可以使用上面实例中的方式来访问结构变量。
    实例:
#include<iostream>
#include<cstring>
using namespace std;
void printBook(struct Books book);
struct Books{
	char title[50];
	char author[50];
	char subject[1000];
	int book_id;
};

int main(){
	struct Books Book1;
	struct Books Book2;
	strcpy(Book1.title, "Learning C++ Programming");
	strcpy(Book1.author, "Bjarne Stroustrup");
	strcpy(Book1.subject, "C++ Programming");
	Book1.book_id = 987654;
	strcpy(Book2.title, "Telecom Billing");
	strcpy(Book2.author,"Yakit Singha");
	strcpy(Book2.subject, "Telecom");
	Book2.book_id = 123456;
	
	printBook(Book1);
	printBook(Book2);
	return 0;
}

void printBook(struct Books book){
	cout<<"Book Title:"<<book.title<<endl;
	cout<<"Book author:"<<book.author<<endl;
	cout<<"Book subject:"<<book.subject<<endl;
	cout<<"Book id:"<<book.book_id<<endl;
	
}

结果显示:

  • 指向结构体的指针
    可以定义指向结构体的指针,方式与定义指向其他类型变量的指针相似,如下所示:
struct Books *struct_pointer;

现在可以在上述定义的指针变量中存储结构体变量的地址。为了查找结构体变量的地址,把&运算符放在结构体名称的前面,如下所示struct_pointer = &Book1;
为了使用指向该结构体的指针访问结构体的成员,需要使用->运算符,如下所示struct_pointer -> title;
实例:

#include<iostream>
#include<cstring>
using namespace std;
void printBook(struct Books *book);
struct Books{
	char title[50];
	char author[50];
	char subject[100];
	int book_id;
};

int main(){
	struct Books Book1;
	struct Books Book2;
	strcpy(Book1.title, "Learning C++ Programming");
	strcpy(Book1.author, "Bjarne Stroustrup");
	strcpy(Book1.subject, "C++ Programming");
	Book1.book_id = 987654;
	strcpy(Book2.title, "Telecom Billing");
	strcpy(Book2.author,"Yakit Singha");
	strcpy(Book2.subject, "Telecom");
	Book2.book_id = 123456;
	printBook(&Book1);
	printBook(&Book2);
	return 0;
}

void printBook(struct Books *book){
	cout<<"Book title:"<<book->title<<endl;
	cout<<"Book author"<<book->author<<endl;
	cout<<"Book subject"<<book->subject<<endl;
	cout<<"Book id:"<<book->book_id<<endl;
}

结果显示:

  • typedef关键字
    有一种更简单的定义结构体的方式,可以为创建的类型取一个“别名”,例如:
typedef struct{
  char title[50];
  char author[50];
  char subject[100];
  int book_id;
}Books;

可以直接使用Books来定义Books类型的变量,而不需要使用struct关键字。
实例:Books Book1, Book2;
可以使用typedef关键字来定义非结构体类型,如下:

typedef long int *pint32;
pint32 x, y, z;

x,y,z都是指向长整型的long int的指针。

posted @ 2023-10-31 21:14  Bonne_chance  阅读(126)  评论(0)    收藏  举报
1