文章目录
【 1. 结构体的定义 】 【 2. 结构体成员的访问 】 【 3. 结构体变量的声明 】 【 4. 指向结构体的指针 】
数组与结构体 :C/C++ 数组允许定义可存储相同类型数据项的变量。而结构体是 C++ 中另一种用户自定义的可用的数据类型,它允许我们存储不同类型的数据项。
【 1. 结构体的定义 】
结构体定义的一般形式:
type_name 是结构体类型的名称, member_type1 member_name1 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。 在结构定义的末尾,最后一个分号之前, 我们可以在定义完结构体后直接定义一个或多个结构变量 ,这是可选的。
struct type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;
实例:声明一个结构体类型 Books,变量为 book1。
struct Books
{
char title[ 50 ] ;
char author[ 50 ] ;
char subject[ 100 ] ;
int book_id;
} book1;
可以利用 typedef 为 所定义的结构体类型 起一个别名。
typedef struct Books
{
char title[ 50 ] ;
char author[ 50 ] ;
char subject[ 100 ] ;
int book_id;
} Books;
Books Book1, Book2;
【 2. 结构体成员的访问 】
使用成员访问运算符即小数点 . 访问结构体变量的成员。 实例 :定义结构体 Books 及其两个结构体变量 Book1 和 Book2,对两个结构体变量的成员进行赋值,最后输出信息。
# include <iostream>
# include <cstring>
using namespace std;
struct Books
{
char title[ 50 ] ;
char author[ 50 ] ;
char subject[ 100 ] ;
int book_id;
} ;
int main ( )
{
Books Book1;
Books Book2;
strcpy ( Book1. title, "C++ 教程" ) ;
strcpy ( Book1. author, "Nowcoder" ) ;
strcpy ( Book1. subject, "编程语言" ) ;
Book1. book_id = 12345 ;
strcpy ( Book2. title, "CSS 教程" ) ;
strcpy ( Book2. author, "Nowcoder" ) ;
strcpy ( Book2. subject, "前端技术" ) ;
Book2. book_id = 12346 ;
cout << "第一本书标题 : " << Book1. title << endl;
cout << "第一本书作者 : " << Book1. author << endl;
cout << "第一本书类目 : " << Book1. subject << endl;
cout << "第一本书 ID : " << Book1. book_id << endl;
cout << "第二本书标题 : " << Book2. title << endl;
cout << "第二本书作者 : " << Book2. author << endl;
cout << "第二本书类目 : " << Book2. subject << endl;
cout << "第二本书 ID : " << Book2. book_id << endl;
return 0 ;
}
【 3. 结构体变量的声明 】
在多个文件中调用结构体变量时,需要在一个 .h 文件中定义该结构体,再在 需要调用的 cpp 源文件中包含上述 .h 文件并 定义结构体变量,最后再在.h 文件中通过 extern 声明该结构体变量。
# include <iostream>
# include "test.h"
using namespace std;
lidar BenewakeLidar;
int main ( )
{
BenewakeLidar. AMP = 123 ;
cout << BenewakeLidar. AMP;
return 0 ;
}
# ifndef TEST_H
# define TEST_H
typedef struct
{
int Dist;
int AMP;
int tem;
bool RecieveFlag;
} lidar;
extern lidar BenewakeLidar;
# endif
【 4. 指向结构体的指针 】
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 ( )
{
Books Book1;
Books Book2;
strcpy ( Book1. title, "C++ 教程" ) ;
strcpy ( Book1. author, "Nowcoder" ) ;
strcpy ( Book1. subject, "编程语言" ) ;
Book1. book_id = 12345 ;
strcpy ( Book2. title, "CSS 教程" ) ;
strcpy ( Book2. author, "Nowcoder" ) ;
strcpy ( Book2. subject, "前端技术" ) ;
Book2. book_id = 12346 ;
printBook ( & Book1 ) ;
printBook ( & Book2 ) ;
return 0 ;
}
void printBook ( struct Books * book )
{
cout << "书标题 : " << book-> title << endl;
cout << "书作者 : " << book-> author << endl;
cout << "书类目 : " << book-> subject << endl;
cout << "书 ID : " << book-> book_id << endl;
}