1. 指针的本质与内存模型
指针是C/C++语言中最强大也最令人困惑的特性之一。要真正理解指针,我们需要从计算机的内存模型开始讲起。
计算机内存可以看作是一个巨大的"酒店",每个"房间"都有唯一的门牌号(内存地址),房间的大小固定(通常是1字节)。当我们声明一个变量时,比如int a = 10;,系统会为这个变量分配一个"房间"(或多个连续房间,取决于类型大小),并把值10存放在这个房间里。
指针变量特殊之处在于,它存储的不是普通数据,而是其他变量的"门牌号"。就像酒店前台的名片盒,每张名片上写的不是客人信息,而是客人房间号。通过这个房间号,我们可以找到并操作对应的房间。
c复制int a = 10; // 在某个房间(比如0x7ffeeaae08d8)存放了值10
int *p = &a; // 指针p存储的是a的地址0x7ffeeaae08d8
提示:
&是取地址运算符,可以获取变量的内存地址;*是解引用运算符,可以通过指针访问指向的内存。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 指针的声明与基本操作
2.1 指针的声明语法
指针声明的通用形式是:
c复制type *pointer_name;
这里的type决定了指针的"视野"——它如何看待所指向的内存。例如:
c复制int *ip; // 指向整数的指针
double *dp; // 指向双精度浮点数的指针
char *cp; // 指向字符的指针
虽然所有指针变量存储的都是地址(通常4或8字节),但类型决定了:
- 指针算术运算时的步长(
int*加1会前进4字节,char*加1前进1字节) - 如何解释指向的内存内容
2.2 指针的四项基本操作
-
定义指针变量:
c复制int *p; // 定义一个指向int的指针 -
取地址操作:
c复制int a = 10; p = &a; // 将a的地址赋值给p -
解引用操作:
c复制printf("%d", *p); // 输出p指向的值(即a的值10) -
指针赋值:
c复制int
