C++指针
前言
这一节内容我们将正式进入指针的学习,这一节内容很重要!!!可能会涉及到一些之前所学习的相关知识,如果你还有不明白的,可以去温习一下之前所学C++基础教程
C++ 指针
C++ 中的 指针 就像一个“地址簿”,它记录了存储某个值的“房子”(内存位置)的地址。学习指针是 C++ 编程的重要部分,因为它不仅可以让你写出更高效的代码,还能完成像 动态内存分配 这样的高级操作,这些是没有指针无法实现的。
什么是地址?
每个变量(比如 int、char 等)在计算机的内存中都占据一个“房子”(内存位置)。这个房子有自己的“地址”,就像你家的门牌号一样,唯一且能指引我们找到这个变量存储在哪里。
在 C++ 中,可以使用符号 &(取地址符)来获取变量的地址。例如:
1 |
|
输出的地址是什么?
当这段代码运行时,会输出类似下面的结果:
1 | var1 变量的地址: 0xbfebd5c0 |
这些看起来像一串奇怪的数字(比如 0xbfebd5c0),其实是计算机给变量分配的“内存地址”。通过这些地址,程序可以快速找到变量的位置,访问或者操作它的值。
更通俗的比喻
假设你的内存是一个巨大的公寓楼,每个房间都有一个房号(内存地址):
var1是住在某个房间的小明,他的房间号是0xbfebd5c0。var2是住在另一个房间的小红,她的房间号是0xbfebd5b6。
如果你想找小明或小红,只需要知道他们的房间号(地址),然后直接去找就可以了。
小总结
- 变量 是房间里的住户。
- 内存地址 是房间号。
- 用
&可以查到变量住在哪个房间(内存地址)。
指针就是“记住房间号”的一种方式,后面你会学习如何用指针操作变量的值,让编程更加灵活和高效!
什么是指针?
指针是一个变量,存放着另一个变量的“地址”(类似于一个门牌号)。通过这个门牌号,我们可以找到并操作那个变量。
想象一下,一个指针就像地图上的标记,指向某个具体位置(变量所在的内存地址)。
如何声明一个指针?
在 C++ 中,声明指针的方式如下:
1 | type *var-name; |
这里:
type是指针指向的变量类型,比如int、float等。*告诉编译器这个变量是一个指针,而不是普通变量。var-name是指针变量的名称。
例如:
1 | int *ip; // 一个整型指针 |
注意:* 在这里的作用是“定义指针”,而不是数学中的乘号。
指针的用法
指针的主要操作可以分为以下几步:
- 定义指针变量:告诉编译器,你要存储某个变量的地址。
- 存储地址到指针变量:通过取地址符
&,获取变量的内存地址,并存储到指针中。 - 访问地址对应的值:通过解引用符
*,获取指针指向的变量的值。
例子
我们通过一个简单的程序来说明:
1 |
|
运行结果:
1 | Value of var variable: 20 |
程序的核心解释
int var = 20;
定义一个整数变量,值为 20。int *ip;
定义了一个指针变量ip,它可以存储一个整数变量的地址。ip = &var;
使用取地址符&,获取变量var的地址,并存储到指针ip中。
此时,ip的值就是var在内存中的地址。输出指针指向的值
使用解引用符*ip,可以通过指针访问变量var的值。
也就是说,*ip等价于var。
指针的本质
无论指针指向的是整数、浮点数还是字符,指针的实际值都是内存地址(一个十六进制数)。
指针的类型(比如 int* 或 char*)是为了告诉编译器,指针指向的变量是什么类型,从而正确操作。
C++ 中的一些指针概念
| 概念 | 描述 |
|---|---|
| 空指针 | 指向“空地址”的指针(NULL)。如果指针未初始化,最好设为 NULL,避免意外使用。 |
| 指针运算 | 可以对指针做加减法(比如指向下一个元素)。 |
| 指针与数组 | 数组的名称本质上是一个指向数组第一个元素的指针。 |
| 指针数组 | 数组可以存储多个指针,称为“指针数组”。 |
| 指向指针的指针 | 一个指针可以指向另一个指针,称为“二级指针”或“指向指针的指针”。 |
| 传递指针给函数 | 通过指针传参,可以直接操作原始数据,而不是拷贝数据。 |
| 从函数返回指针 | 函数可以返回一个指针,指向局部变量、静态变量或动态分配的内存。 |
通俗总结
指针是什么?
它是“一个变量的地址”。指针能干什么?
- 指向一个变量,间接操作它的值。
- 动态管理内存(比如数组的大小可以运行时确定)。
如何理解指针?
- 想象成地图上的标记:指针记录了某个地点(变量)的地址。通过标记,我们可以访问这个地点的内容。
为什么要用指针?
指针让代码更高效,可以节省内存,快速定位变量,实现复杂的数据结构(如链表、树等)。








