C++ 知识量:19 - 82 - 316
C++有多种复合类型,包括:
数组(Array):数组是一种可以存储固定大小的相同类型元素的数据结构。
结构体(Struct):结构体是一种用户自定义的数据类型,可以包含多个不同类型的数据成员。
联合(Union):联合是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。
枚举(Enum):枚举是一种用户定义的数据类型,它包含了一组整数值。
类(Class):类是一种用户定义的数据类型,它可以包含数据成员(变量)和方法(函数)。
这些复合类型都可以用来创建更复杂的数据结构,以更好地满足编程需求。例如,可以创建一个包含多个数据成员的结构体,或者创建一个包含多个不同类型的元素的数组。
在C++中,引用是一种特殊的变量,它允许使用一个已经存在的变量的值来初始化,并且之后可以通过引用来修改这个值。引用被声明时,必须被初始化,而且一旦一个引用被初始化后,就不能再被重新初始化。
下面是一个关于引用的基本示例:
int a = 10; int& b = a; // b 是对 a 的引用 b = 20; // 修改 b 的值,也就修改了 a 的值 cout << a; // 输出 20
在这个例子中,int& b = a; 这行代码创建了一个名为 b 的引用,它是 a 的引用。因此,当修改 b 的值时,a 的值也会随之改变。
在C++中,可以使用引用作为函数的参数,这样可以避免在函数调用时复制参数的值。例如:
void increment(int& n) { n++; } int main() { int a = 10; increment(a); // 通过引用传递a cout << a; // 输出 11 return 0; }
在这个例子中,increment 函数接收一个整数的引用作为参数。当调用这个函数并传递 a 作为参数时,并没有复制 a 的值,而是传递了一个指向 a 的引用。因此,调用 increment 函数时,a 的值被增加了1。
C++中的指针是一种特殊的数据类型,它存储的是内存地址,而不是实际的数据值。指针在C++编程中有很多用途,例如提高效率、动态内存分配、函数参数传递等。
以下是一些基本的C++指针概念:
声明指针:要声明一个指针,需要使用星号(*)来指示它是一个指针类型。例如,int *ptr; 声明了一个指向整数的指针。
初始化指针:可以通过赋值运算符将一个变量的地址分配给指针。例如,int a = 10; int *ptr = &a; 将变量a的地址赋给了指针ptr。
间接引用(dereferencing):使用*运算符可以获取指针指向的值。例如,cout << *ptr; 将输出指针ptr指向的整数值。
空指针:可以使用NULL或0来初始化一个空指针。例如,int *ptr = NULL; 声明了一个空指针。
指针的指针(pointer-to-pointer):可以使用双星号(**)来声明一个指向指针的指针。例如,int **ptr_array; 声明了一个指向指针数组的指针。
数组和指针的关系:数组名实际上是一个指向数组第一个元素的指针。例如,int arr[10]; 可以理解为int* arr = new int[10];,即arr指向了数组arr的第一个元素。
函数参数传递:当函数需要处理大量数据时,使用指针作为函数参数可以避免数据的复制,提高效率。在函数内部,可以通过指针来修改原始数据。
需要注意的是,不正确的使用指针可能会导致内存泄漏、野指针等问题,因此在使用指针时需要格外小心。
在C++中,复合类型是指由其他类型组合而成的类型。常见的复合类型包括数组、结构体、联合体等。下面分别介绍它们的声明方法。
1. 数组
数组是一种包含多个同类型元素的数据结构,可以通过索引访问每个元素。在C++中,可以使用以下语法声明一个数组:
type array_name[size];
其中,type是数组中元素的类型,array_name是数组的名称,size是数组的大小(即元素的个数)。例如,声明一个包含5个整数的数组:
int myArray[5];
2. 结构体
结构体是一种用户自定义的数据类型,可以包含多个不同类型的数据成员。在C++中,可以使用以下语法声明一个结构体:
struct structure_name { type1 member1; type2 member2; // ... };
其中,structure_name是结构体的名称,type1、type2等是结构体中成员的类型。例如,声明一个包含整数和字符串的结构体:
struct Person { int age; string name; };
3. 联合体
联合体是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。在C++中,可以使用以下语法声明一个联合体:
union union_name { type1 member1; type2 member2; // ... };
其中,union_name是联合体的名称,type1、type2等是联合体中成员的类型。例如,声明一个包含整数和浮点数的联合体:
union MyUnion { int intVal; float floatVal; };
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6