ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 【知识精讲】地址与取地址符 ## Part1 在之前学习变量的概念的时候,小渡曾经让你把变量想象成一个盒子,每个变量就像是盒子一样,里面可以装上东西。不同类型的变量,就对应了可以装不同类型东西的盒子(以后你会知道,这“盒子”的实质是内存的空间)。 除了类型之外,变量还有一个属性叫做**地址**,你可以认为这是一种贴在盒子上的数字标签。如果你把这个地址给到你的好朋友小明,小明就可以用这个地址来找到“贴着对应标签的盒子”——对应的变量。 ## Part2 这里我们需要向大家介绍一个运算符`&`,它叫做**取地址符**。对于某一个 X 类型(这里的 X 可以是 `int`、`float` 或者其它的类型)的变量 `a`,当我们写`a`时,我们得到的是变量 `a` 中存储的 X 类型的值(也就是盒子里装的那个东西),而如果我们写`&a`则会得到变量 `a` 现在存储位置的地址值(也就是盒子上贴的那个标签)。 然而,在 C++ 语言中地址值也可以被认为是一种特殊类型的值。C++ 语言中也设计了专门类型的变量来对地址值进行储存。 ## Part3 我们声明一个可以存储整数型值的变量 `a` 会写成`int a;`,而如果我们希望有一个变量 `p`,让它可以储存整数型值变量的地址值时,我们则需要写成`int *p`。 当我们有一个这样的变量 `p` 以后,我们可以将一个整数型变量 `a` 的地址放到 `p` 里面。这个过程可以通过将变量 `p` 赋值成“取变量 `a` 的地址”的形式来完成——`p = &a;`。 [![Screen Shot 2016-01-11 at 11.31.27 AM.png](http://res.jisuanke.com/img/upload/20160111/2f3e98429f8aa093896072e8badde92fc136eb7f.png)](http://res.jisuanke.com/img/upload/20160111/2f3e98429f8aa093896072e8badde92fc136eb7f.png) ## Part4 类似地,我们可以通过`float *q`声明一个变量,来存储浮点数类型变量`float x;`的地址值。我们也可以通过`unsigned int *h`声明一个变量,来存储无符号整数类型变量`unsigned int y;`的地址值。 聪明的你应该发现了,将 `*` 标记加在类型之后标记的变量,是用于存储地址值而不是普通的数值的。 好好回想一下“变量”、“变量的值”、“变量的地址”、“特殊的用于存储地址的变量”这些不同的概念。想想小渡给你说的“盒子”的比喻,是不是理解得更清楚了呢?