首页 > 编程语言 >C++数据结构

C++数据结构

时间:2023-10-31 21:23:19浏览次数:32  
标签:struct C++ Book1 Book2 Books strcpy 数据结构 book

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的指针。

标签:struct,C++,Book1,Book2,Books,strcpy,数据结构,book
From: https://www.cnblogs.com/bonne-chance/p/17801568.html

相关文章

  • 数据结构-布隆过滤器
    它是一种概率数据结构,用于查找集合中是否存在元素。换句话说,它可以判断一个元素是否可能(而不是绝对)存在于集合中。它具有空间效率,因为它不存储实际元素(如哈希映射)。此外,布隆过滤器可能会给出假阳性结果,但不会出现假阴性。......
  • C++基础杂记(2)
    将数组传入函数禁止修改数组的值函数的地址与函数的指针函数的指针数组函数的static与inline引用左值和引用传参C++11的数组for循环64位Linux操作系统中C++中常见基本类型所占字节数C++11类成员变量的初始化默认成员初始化器成员变量初始化列表委......
  • C++基础杂记(3)
    类的继承基类与派生类之间的构造行为在派生类中使用基类方法protected的访问权限多态公有继承关键字virtual示例抽象基类(ABC)私有继承和保护继承多重继承类的继承基类与派生类之间的构造行为派生类可以调用基类的公共成员,但无法调用基类的私有成员。所......
  • 继续更新完善:C++ 结构体代码转MASM32代码
    一、需求分析在用MASM32编程更新完善SysInfo的网络连接信息,用到了MIB_TCP6TABLE_OWNER_MODULE结构体:typedefstruct_MIB_TCP6TABLE_OWNER_MODULE{DWORDdwNumEntries;MIB_TCP6ROW_OWNER_MODULEtable[ANY_SIZE];}MIB_TCP6TABLE_OWNER_MODULE,*PMIB_T......
  • Opencascad开发(C++)-数据类型转换-Shape、Verterx和gp_pnt的转化
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录1、前言2、TopoDS_Shape与TopoDS_Vertex的转换2.1TopoDS_Shape到TopoDS_Vertex2.2TopoDS_Vertex到TopoDS_Shape3、TopoDS_Vertex与gp_Pnt3.1TopoDS_Vertex到gp_Pnt3.2gp_Pnt到TopoDS_Vertex1、前言在Open......
  • Opencascad(C++)-建模-创建有界直线段
    文章目录1、前言2、用gp_Lin创建一条直线2.1gp_Lin类成员函数2.2创建一条直线2.3运行结果3、创建一条有界的直线段3.1功能说明3.2函数说明3.2创建直线段的代码3.3测试效果1、前言在Opencascad开发时,经常会遇到创建直线的情况,采用gp_Line创建的直线段是无界的,如果想创建......
  • tdc++.so.6: version `GLIBCXX_3.4.29' not found
     001、python程序报错如下: 002、问题分析a、调用的是python程序b、libstdc++.so.6是c++标准库执行python程序时,需要调用c++标准库,libstdc++.so.6(lib=glib,6表示第6版),版本不匹配报错,无法找到:GLIBCXX_3.4.29。 003、确认调用的哪里的python程序(base)[b20223040......
  • c++ ftp上传下载
    #include<afxinet.h>intmain(){BOOLdRes,pRes;HINTERNEThInternet;HINTERNEThConnect;hInternet=InternetOpen("A3GSSample",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,INTERNET_FLAG_NO_CACHE_WRITE);if(NULL==hInternet){printf("Inter......
  • C++基本输入输出
    C++基本输入输出C++标准库提供了一组丰富的输入/输出功能。C++的I/O操作发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内流向设备(如显示器、打印机、磁盘驱动器、网络连接等),这叫做输出操作。I/O库头文件......
  • 数据结构
    数据结构定义数据结构就是设计数据以何种方式组织并存放在计算机中eg:列表,字典,元组,堆,栈,队列程序=数据结构(静态的数据)+算法(动态的操作)分类逻辑结构线性(一对一)非线性树结构(一对多)图结构(多对多)集合结构(除属于同一集合,别无其它关系)存储结构(物理结构)顺序存储结......