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

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

On this page