C++

C++ 知识量:19 - 82 - 316

2.3 复合类型><

c++的复合类型- 2.3.1 -

C++有多种复合类型,包括:

  • 数组(Array):数组是一种可以存储固定大小的相同类型元素的数据结构。

  • 结构体(Struct):结构体是一种用户自定义的数据类型,可以包含多个不同类型的数据成员。

  • 联合(Union):联合是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。

  • 枚举(Enum):枚举是一种用户定义的数据类型,它包含了一组整数值。

  • 类(Class):类是一种用户定义的数据类型,它可以包含数据成员(变量)和方法(函数)。

这些复合类型都可以用来创建更复杂的数据结构,以更好地满足编程需求。例如,可以创建一个包含多个数据成员的结构体,或者创建一个包含多个不同类型的元素的数组。

引用- 2.3.2 -

在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。

指针- 2.3.3 -

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的第一个元素。

  • 函数参数传递:当函数需要处理大量数据时,使用指针作为函数参数可以避免数据的复制,提高效率。在函数内部,可以通过指针来修改原始数据。

需要注意的是,不正确的使用指针可能会导致内存泄漏、野指针等问题,因此在使用指针时需要格外小心。

复合类型的声明- 2.3.4 -

在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;  
};