如果说之前的变量、数组之类的只是热身那么今天我们要聊的指针Pointer就是 C 语言的“灵魂”。在开始之前请大家在大脑中建立一个概念计算机的内存就是一排排连在一起的房间每个房间都有一个唯一的编号这就是地址。通常指针变量存储的是“住户的门牌号”。一、 两个核心符号与*要把指针学好你必须分清这两个“戏法”(取地址符)拿到变量的“门牌号”。*(解引用符/间接访问符)拿着“门牌号”去“找房间”看看里面住着谁。代码演示codeC关键1int *p这里的*是声明指针的标记而后续代码里的*p则是去那个地址取值。这是两个完全不同的含义不要搞混二、 指针与数组亲密无间的战友在C 语言中codeCspan stylecolor:#2b2d31codespan stylecolor:#005cc5#include stdio.h/span span stylecolor:#d73a49int/span span stylecolor:#6f42c1main/span() { span stylecolor:#d73a49int/span arr[] {span stylecolor:#005cc510/span, span stylecolor:#005cc520/span, span stylecolor:#005cc530/span}; span stylecolor:#d73a49int/span *p arr; span stylecolor:#6a737d// arr 等同于 arr[0]/span span stylecolor:#d73a49for/span (span stylecolor:#d73a49int/span i span stylecolor:#005cc50/span; i span stylecolor:#005cc53/span; i) { span stylecolor:#6a737d// 两种方式等价arr[i] 和 *(p i)/span span stylecolor:#e36209printf/span(span stylecolor:#032f62第 %d 个元素是: %d\n/span, i, *(p i)); } span stylecolor:#d73a49return/span span stylecolor:#005cc50/span; }/code/span三、 为什么要用指针经典案例交换函数你有可能会问我直接用变量不就行了为什么要多此一举用指针函数只能通过指针来修改“外部”变量的值如果不传指针函数内的交换只是“自娱自乐”。codeCspan stylecolor:#2b2d31codespan stylecolor:#005cc5#include stdio.h/span span stylecolor:#6a737d// 必须传入地址才能修改外部的值/span span stylecolor:#d73a49void/span span stylecolor:#6f42c1swap/span(span stylecolor:#d73a49int/span *a, span stylecolor:#d73a49int/span *b) { span stylecolor:#d73a49int/span temp *a; *a *b; *b temp; } span stylecolor:#d73a49int/span span stylecolor:#6f42c1main/span() { span stylecolor:#d73a49int/span x span stylecolor:#005cc51/span, y span stylecolor:#005cc52/span; span stylecolor:#e36209printf/span(span stylecolor:#032f62交换前: x%d, y%d\n/span, x, y); swap(x, y); span stylecolor:#6a737d// 传入地址/span span stylecolor:#e36209printf/span(span stylecolor:#032f62交换后: x%d, y%d\n/span, x, y); span stylecolor:#d73a49return/span span stylecolor:#005cc50/span; }/code/span关于今天的注意事项学习指针最容易出现的错误是野指针int *p; *p 10;这会导致程序崩溃。记得指针声明后先让它指向一个有效的地址。指针越界像数组一样不要通过指针访问你没分配内存的区域。指针确实难但它是通往底层编程、高性能程序的必经之路。不要试图通过脑子去模拟指针的每一步多写代码通过昨天讲的调试器Debugger观察内存变化可以理解的很快有问题欢迎交流