LogoCSP Wiki By Yundou
扩展阅读

指针

指针

指针的概念

在生活中,我们去图书馆找书,往往需要先查看图书索引,索引上记录了书所在的书架位置,通过这个位置信息我们就能找到书。在编程里,指针就像是这个图书索引,它保存的是内存中某个数据的位置信息,通过这个位置信息我们就能找到对应的数据。

图片描述
int 类型的指针,指向数据的内存的地址

指针的定义

定义指针和定义普通的变量有点像,不过要在数据类型后面加一个星号 *

基本语法

数据类型* 指针变量名;

定义示例

// 定义一个可以指向整数的指针变量,名字叫 p
int* p;

指针的使用

指针主要有两个操作,一个是让指针指向某个变量,另一个是通过指针访问它所指向的变量的值。

让指针指向某个变量

要让指针指向某个变量,需要使用取地址运算符 &,它能得到变量在内存中的位置。

#include <iostream>
using namespace std;

int main() {
    // 定义一个整数变量,名字叫 num,初始值为 10
    int num = 10;
    // 定义一个可以指向整数的指针变量,名字叫 p
    int* p;
    // 让指针 p 指向变量 num,也就是让 p 保存 num 的内存位置
    p = &num;

    return 0;
}

通过指针访问它所指向的变量的值

要通过指针访问它所指向的变量的值,需要使用解引用运算符 *

#include <iostream>
using namespace std;

int main() {
    // 定义一个整数变量,名字叫 num,初始值为 10
    int num = 10;
    // 定义一个可以指向整数的指针变量,名字叫 p
    int* p;
    // 让指针 p 指向变量 num,也就是让 p 保存 num 的内存位置
    p = &num;
    // 通过指针 p 访问它所指向的变量的值,并输出
    cout << "指针 p 所指向的变量的值是:" << *p << endl;

    return 0;
}

例题

例题 1:使用指针修改变量的值

#include <iostream>
using namespace std;

int main() {
    // 定义一个整数变量,名字叫 num,初始值为 10
    int num = 10;
    // 定义一个可以指向整数的指针变量,名字叫 p
    int* p;
    // 让指针 p 指向变量 num,也就是让 p 保存 num 的内存位置
    p = &num;
    // 通过指针 p 修改它所指向的变量的值,把它改成 20
    *p = 20;
    // 输出变量 num 的值,看看是否已经被修改
    cout << "变量 num 的值是:" << num << endl;

    return 0;
}

例题 2:交换两个变量的值

#include <iostream>
using namespace std;

// 定义一个函数,用来交换两个整数变量的值
void swap(int* a, int* b) {
    // 定义一个临时变量,用来保存 a 所指向的变量的值
    int temp = *a;
    // 把 b 所指向的变量的值赋给 a 所指向的变量
    *a = *b;
    // 把临时变量的值赋给 b 所指向的变量
    *b = temp;
}

int main() {
    // 定义两个整数变量,名字分别叫 x 和 y,初始值分别为 10 和 20
    int x = 10;
    int y = 20;
    // 输出交换前 x 和 y 的值
    cout << "交换前:x = " << x << ", y = " << y << endl;
    // 调用 swap 函数,把 x 和 y 的地址作为参数传递给它
    swap(&x, &y);
    // 输出交换后 x 和 y 的值
    cout << "交换后:x = " << x << ", y = " << y << endl;

    return 0;
}

通过上面的讲解和例题,你应该对指针的概念、定义和使用有了基本的了解。指针虽然有点难理解,但是它能让我们更灵活地操作内存中的数据。在使用指针时,一定要小心,避免出现错误。