文章目录
引用与指针
引用
C++中的引用是一个已存在变量的别名,它提供了对变量的间接访问。引用可以被看作是一个已存在变量的别名,对引用的操作实际上就是对原变量的操作。
声明引用
声明引用:可以通过在变量名前加上引用符号(&)来声明一个引用。例如:int num = 10; int &ref = num;
声明了一个对整数类型变量num的引用ref。
初始化引用
初始化引用:引用必须在声明时进行初始化,并且一旦初始化后,就不能再引用其他变量。例如:int num = 10; int &ref = num;
引用ref被初始化为num。
引用和原变量的关系
引用和原变量的关系:引用和原变量共享同一块内存空间,对引用的修改会影响原变量的值,反之亦然。例如:int num = 10; int &ref = num; ref = 20; cout << num;
将输出20。
引用作为函数参数
引用作为函数参数:可以将引用作为函数的参数,这样可以**直接操作原变量而不是副本。**例如:
void increment(int &num) {
num++;
}
int main() {
int num = 10;
increment(num);
cout << num; // 输出11
return 0;
}
在这个例子中,我们将num的引用作为参数传递给increment函数,函数内部对引用进行操作会直接修改原变量num的值。
引用作为函数返回值
引用作为函数返回值:可以将引用作为函数的返回值,这样可以返回一个已存在的变量而不是副本。例如:
int& getMax(int &a, int &b) {
return (a > b) ? a : b;
}
int main() {
int num1 = 10;
int num2 = 20;
int &maxNum = getMax(num1, num2);
cout << maxNum; // 输出20
return 0;
}
在这个例子中,getMax函数返回了num1和num2中较大的那个数的引用,我们将其赋值给maxNum引用,可以直接访问到较大的数。
指针
C++中的指针是一种特殊的变量类型,它存储了一个内存地址。指针可以用来访问和操作内存中的数据。
声明指针
声明指针:可以通过在变量名前加上星号(*)来声明一个指针变量。例如:int *ptr
; 声明了一个指向整数类型的指针变量ptr。
取址运算符(&)
取址运算符(&):可以使用取址运算符(&)来获取变量的地址。例如:int num = 10; int *ptr = #
将num的地址赋值给ptr。
解引用运算符(*)
解引用运算符():可以使用解引用运算符()来访问指针所指向的内存中的值。例如:int num = 10; int *ptr = # cout << *ptr;
将输出10。
空指针
空指针:可以使用空指针来表示指针变量不指向任何有效的内存地址。空指针可以用nullptr关键字表示。例如:int *ptr = nullptr;
动态内存分配
动态内存分配:可以使用new关键字来在运行时动态地分配内存。例如:int *ptr = new int;
将在堆上分配一个整数大小的内存,并将其地址赋值给ptr。使用完后,需要使用delete关键字来释放内存,以防止内存泄漏。
数组指针
数组指针:指针也可以用来访问数组中的元素。例如:int arr[5] = {1, 2, 3, 4, 5}; int *ptr = arr;
可以通过ptr[i]
来访问数组中的第i个元素。
指针的算术运算
指针的算术运算:指针可以进行算术运算,如加法、减法等。例如:int *ptr = arr; ptr++;
将指针ptr向后移动一个元素的大小。
野指针
野指针:指针变量未初始化或者指向已经释放的内存时,称为野指针。使用野指针可能导致程序崩溃或者产生未定义的行为。
指针和常量
指针和常量:可以使用const关键字来声明指向常量的指针,即指针所指向的值不能被修改。例如:const int *ptr = #
表示ptr是一个指向常量整数的指针。
指针和引用的区别
指针和引用的区别:指针和引用都可以用来间接访问变量,但是指针可以被重新赋值指向其他对象,而引用一旦绑定到一个对象后就不能再绑定到其他对象。