地址与指针#
需求
简单理解地址与指针的概念。
提示
视频
…
在内存中保存的任何东西都有一个 地址。例如:
int var = 17;
这段代码为变量 var
分配一段 “int 大小” 的内存,并将值 17
保存到这段内存中。
可以保存和操作地址。保存地址的对象(即一块内存或者说是一个内存字节序列)被称为 指针。例如,用于保存 int
的地址的类型称为“指向 int
的指针”或“int
指针”,其表示方法为 int*
:
int* ptr = &var // ptr 保存 var 的地址
地址运算符 &
用于获得一个对象的地址。
每种类型都有对应的指针类型。例如:
int x = 17;
int* pi = &x; // int 指针
pi
@0x7fff19cd14f8
double e = 2.14143;
double* pd = &e; // double 指针
pd
@0x7fff19cd14f8
查看指向的对象的值,可以使用 “内容”运算符 *
(这是一元运算符)。
*pi
17
*pd
2.1414300
内容运算符 (常称为 解引用 运算符)也可以被用于赋值操作的左侧:
*pi = 27; // 正确:可以将 27 赋予 pi 指向的 int
*pd = 3.14; // 正确:可以将 3.14 赋予 pd 指向的 double
*pd = *pi; // 正确:可以将一个 int (*pi) 赋予一个 double (*pd)
27.000000
重要
指针类型提供一些适用于地址的操作;
int
提供适用于整数的(算术和逻辑)操作。
警告
不要混用指针和整数!
int i = pi; // 错误:不能将一个 int* 赋予一个 int
pi = 7; // 错误:不能将一个 int 赋予一个 int*
同样,不同类型的指针也不能混用:
char* pc = pi; // 错误:不能将一个 int* 赋予一个 chat*
char c = 'a';
char* pc = &c;
pi = pc; // 错误:不能将一个 char* 赋予一个 int*