结构体
定义结构
使用 struct 关键字来定义结构体。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:
struct type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;
type_name 是结构体类型的名称,member_type1 member_name1 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,可以指定一个或多个结构变量。一个结构体类型 Books,变量为 book:
#include<iostream>
#include<cstring>
using namespace std;
struct Books{
string title;
string author;
int bookId;
};
int main(){
struct Books b;
b.title = "CPP";
b.author = "Bruke";
b.bookId = 1;
cout<<b.title<<endl;
cout<<b.author<<endl;
cout<<b.bookId<<endl;
}
/*
CPP
Bruke
1
*/
结构作为函数参数
我们可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。可以使用上面实例中的方式来访问结构变量
#include<iostream>
#include<cstring>
using namespace std;
void printBook( struct Books book );
// 声明一个结构体类型 Books
struct Books{
string title;
};
int main( ){
Books Book1; // 定义结构体类型 Books 的变量 Book1
Books Book2; // 定义结构体类型 Books 的变量 Book2
Book1.title = "one";
Book2.title = "two";
// 输出 Book2 信息
printBook( Book1 );
printBook( Book2 );
return 0;
}
void printBook( struct Books book ){
cout << "书标题 : " << book.title <<endl;
}
当上面的代码被编译和执行时,它会产生下列结果:
书标题 : one
书标题 : two
指向结构的指针
我们也可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:
struct Books *struct_pointer;
用结构体指针重写上面的代码
#include<iostream>
#include<cstring>
using namespace std;
void printBook( struct Books *book );
// 声明一个结构体类型 Books
struct Books{
string title;
};
int main( ){
Books Book1; // 定义结构体类型 Books 的变量 Book1
Books Book2; // 定义结构体类型 Books 的变量 Book2
Book1.title = "one";
Book2.title = "two";
// 输出 Book2 信息
printBook(&Book1);
printBook(&Book2);
return 0;
}
void printBook( struct Books *book ){
cout << "书标题 : " << book->title <<endl;
}
C++的结构体
C++ 的结构体本质上就是一个类。只不过所有的字段都是 public 的。
#include<iostream>
#include<cstring>
using namespace std;
void printBook( struct Books *book );
// 声明一个结构体类型 Books
struct Books{
string title;
Books(){};
Books(string title){
this->title = title;
};
};
int main(){
Books Book1; // 定义结构体类型 Books 的变量 Book1
Book1.title = "one";
Books *b = new Books("struct is a class");
// 输出 Book2 信息
printBook(&Book1);
printBook(b);
return 0;
}
void printBook( struct Books *book ){
cout << "书标题 : " << book->title <<endl;
}
/*
书标题 : one
书标题 : struct is a class
*/
typedef 关键字
下面是一种更简单的定义结构的方式,您可以为创建的类型取一个"别名"。例如:
typedef struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
} Books;
现在,您可以直接使用 Books 来定义 Books 类型的变量,而不需要使用 struct 关键字。下面是实例:
Books Book1, Book2;
您可以使用 <b>typedef</b> 关键字来定义非结构类型,如下所示:
typedef long int *pint32;
pint32 x, y, z;
x, y 和 z 都是指向长整型 long int 的指针。