Level 1 · Day 10

指针(Pointer)

每个变量都住在内存的某个地址;指针就是专门存"地址"的变量。

一、两个关键符号

&n —— 取地址:拿到变量 n 的门牌号。
*p —— 解引用:顺着指针 p 存的地址,找到那个变量的值。

它们互为逆操作:& 把"变量"变"地址",* 把"地址"变回"变量"。

二、互动演示:指针怎么指、怎么改

橙色是变量 n,蓝色是指针 p。点按钮一步步看 p = &n*p*p = 100

0x1004
35
int n
0x1008
 
0x2000
int* p

三、指针与数组同源

数组名就是首元素地址:int* p = a; 让 p 指向 a[0]。 指针 +1 自动跳到下一个元素,所以 a[i] 等价于 *(a + i)

四、参考代码

#include <iostream>
using namespace std;

int main() {
    int n = 35;
    int* p = &n;        // p 存放 n 的地址
    cout << *p << endl;  // 35:顺着 p 找到 n 的值
    *p = 100;           // 通过 p 修改 n
    cout << n << endl;   // 100:n 真的被改了

    int a[5] = {10, 20, 30, 40, 50};
    int* q = a;             // 指向 a[0]
    cout << *(q + 1);       // 20,等价于 a[1]
    cout << sizeof(int);    // 4
    return 0;
}

读法:int* p ——"p 是指向 int 的指针"。&取地址,*取值。