# 【知识精讲】地址与取地址符
## 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;`的地址值。
聪明的你应该发现了,将 `*` 标记加在类型之后标记的变量,是用于存储地址值而不是普通的数值的。
好好回想一下“变量”、“变量的值”、“变量的地址”、“特殊的用于存储地址的变量”这些不同的概念。想想小渡给你说的“盒子”的比喻,是不是理解得更清楚了呢?
- 教材介绍
- 《编程初学入门常识》
- 什么是程序语言
- 【知识精讲】编程与编程语言
- 【选择测试】编程语言分类
- 【知识精讲】高级语言分类
- 【选择测试】编译与解释
- 【选择测试】程序员笑话-Java
- 熟悉键盘上用于编程的键位
- 【知识精讲】认识你的键盘
- 【知识精讲】中文和英文字符
- 【匹配测试】识别中英文符号
- 【选择测试】中英文符号的影响
- 【伴随编程】不要使用中文引号
- 【伴随编程】不要使用中文分号
- 【伴随编程】正确地输入符号
- 【选择测试】找出程序中的错误
- 初始工程师思维
- 【知识精讲】二进制思想
- 【选择测试】程序员笑话-凑整
- 【知识精讲】闭合的逻辑
- 【选择测试】程序员笑话-条件
- 程序员职业与生活
- 【知识精讲】程序员的发展方向
- 【知识精讲】程序员的装备
- 【知识精讲】程序员的健康
- 【选择测试】做一名健康的程序员
- 《C++程序设计》
- 前言
- 【知识精讲】编程与计算机科学
- 【知识精讲】编程与软件工程
- 【知识精讲】如何学习编程
- 你好C++
- 【知识精讲】你好,C++
- 【知识精讲】C++程序是如何开发的
- 【知识精讲】成为一名Power User
- 【伴随编程】让我们一起说你好
- 【知识精讲】你的第一个C++语言程序
- 【伴随命令】编译、运行你的程序
- 【伴随编程】将变量流式输出
- 【选择测试】变量的作用域
- 【知识精讲】变量与数据类型
- 【匹配测试】C++语言的入门概念
- 【知识精讲】在程序中学会换行
- 【选择测试】正确地换行
- 简单数学运算
- 【知识精讲】重新认识基本运算
- 【选择测试】运算符的理解
- 【伴随编程】做一下简单的运算
- 【伴随编程】a 的 n 次方
- 【知识精讲】数学函数
- 【伴随编程】让C++语言变成计算器
- 【伴随编程】计算球的体积
- 【匹配测试】数学世界知多少
- 【知识精讲】在程序中添加注释
- 【选择测试】正确地写注释
- 从伴随输入到变量地址
- 【伴随编程】 一个数字复读机器
- 【选择测试】理解标准输入输出
- 【伴随编程】一个加法计算器
- 【程序设计】A+B+C问题
- 【伴随编程】简单的I/O格式控制
- 【知识精讲】地址与取地址符
- 【伴随编程】看看我们的地址
- 习题一:面积与周长
- 【程序设计】矩形面积与周长
- 【程序设计】三角形面积与周长
- 【程序设计】圆形面积与周长
- 程序中的是与非
- 【知识精讲】是非的表示与关系运算
- 【伴随编程】验一验关系运算式
- 【选择测试】关系运算式求值
- 【知识精讲】如果的意义
- 【伴随编程】分段函数求值
- 【知识精讲】如果之后的如果
- 【伴随编程】五则运算器
- 【选择测试】分支的嵌套
- 【伴随编程】问号表达式
- 【知识精讲】是非之间的逻辑组合
- 【伴随编程】判断闰年
- 【程序设计】日期合法性
- 【知识精讲】多路顺序结构
- 【知识精讲】在程序中学会缩进
- 【选择测试】正确的缩进
- C++程序中的苦力
- 【知识精讲】使用循环结构
- 【选择测试】对比两种循环
- 【伴随编程】使用while循环
- 【填空测试】理解循环结构
- 【知识精讲】自减和自增运算符
- 【伴随编程】使用自增运算符
- 【知识精讲】for循环
- 【选择测试】for循环的使用
- 【程序设计】一大波好玩儿的程序
- 《代码能力快速提升》
- 《基础数据结构》
- 《搜索入门》
- 《动态规划基础》
- 《数论和基础数学》
- 《图和数基础》