第八课:指针与引用
学习目标:
- 了解指针的概念及其在C++中的作用。
- 学习如何声明指针,以及如何使用指针访问和修改内存地址中的数据。
- 掌握引用的概念,理解引用与指针的区别。
- 学习如何使用指针和引用传递函数参数,以及这样做的优势。
学习内容:
-
指针的概念
指针是一个变量,其值为另一个变量的内存地址。通过指针,可以从远程位置访问和修改变量的值。 -
使用指针
- 代码示例:
#include <iostream> using namespace std; int main() { int var = 20; // 实际变量声明 int *ip; // 指针变量声明 ip = &var; // 在指针变量中存储 var 的地址 cout << "Value of var variable: "; cout << var << endl; // 输出在指针变量中存储的地址 cout << "Address stored in ip variable: "; cout << ip << endl; // 访问指针中地址的值 cout << "Value of *ip variable: "; cout << *ip << endl; return 0; }
- 预计输出效果:
Value of var variable: 20 Address stored in ip variable: [var的地址] Value of *ip variable: 20
- 使用场景:
指针在数组、动态内存管理、函数参数传递等场景中非常有用,尤其是在需要直接访问内存或者优化性能时。
- 代码示例:
-
引用的概念
- 概念讲解:
引用是一个变量的别名,它是另一个变量的引用名。引用必须在声明时就被初始化,并且一旦被初始化后,就不能改变引用的关联。
- 概念讲解:
-
使用引用
- 代码示例:
#include <iostream> using namespace std; int main() { int i = 3; int& r = i; // 声明引用 r cout << "Value of i: " << i << endl; cout << "Value of i reference: " << r << endl; r = 5; // 修改引用变量的值 cout << "Value of i: " << i << endl; cout << "Value of i reference: " << r << endl; return 0; }
- 预计输出效果:
Value of i: 3 Value of i reference: 3 Value of i: 5 Value of i reference: 5
- 使用场景:
引用通常用于函数参数传递,确保对实参的直接操作,以及用于返回多个值。
- 代码示例:
练习题:
编写一个函数 swap
,它交换两个整数的值。这个函数应该使用指针来直接修改传入的变量的值。
练习答案:
#include <iostream>
using namespace std;
// 函数声明
void swap(int *x, int *y);
// 主函数
int main() {
int a = 100;
int b = 200;
cout << "Before swap, value of a: " << a << endl;
cout << "Before swap, value of b: " << b << endl;
swap(&a, &b); // 使用指针传递地址
cout << "After swap, value of a: " << a << endl;
cout << "After swap, value of b: " << b << endl;
return 0;
}
// 函数定义
void swap(int *x, int *y) {
int temp;
temp = *x; // 保存地址 x 的值
*x = *y; // 把 y 赋值给 x
*y = temp; // 把 x 赋值给 y
}
// 预计输出:
// Before swap, value of a: 100
// Before swap, value of b: 200
// After swap, value of a: 200
// After swap, value of b: 100
在这个练习中,swap
函数利用指针直接修改了传递给它的两个参数的值。通过使用指针,我们可以在不返回任何值的情况下,改变传入的参数本身的值。