7 指针
7.1 指针的基本概念
作用:通过指针间接拜访内存
- 内存编号是从 0 开始的,个别是十六进制示意的(具体几个字节应该是看零碎的)
- 能够利用指针变量来存变量的地址
7.2 指针变量的定义和应用
语法:dataType * pointVariableName = &variableName
&
是一个取地址符号。
你能够用解援用符号 *
来拜访指针拜访的内存。
*pointVariableName
就示意 variableName
这一块内存里的存储的变量
7.3 指针所占内存空间
指针也是一种数据类型,那么这种类型占多少空间呢?
猜想,和零碎相干。64 位的零碎的内存地址可能是 64 位,而 32 位零碎可能是 32 位。
在 32 位零碎下占用 4 个字节。而 64 位零碎占 8 个字节。然而大多数开发环境都是 32 位。(此处也能够抉择 x64 编译环境来切换。
7.4 空指针和野指针
空指针:指针变量指向内存中编号为 0 的空间
用处:初始化
留神:空指针指向的内存是 不能拜访 的
语法:dataType* pointVariableName = NULL;
野指针:指针指向了非法的内存空间
这是一种谬误,在程序中要尽量避免呈现野指针
语法:int* p = (int*) 0x1100;
然而实际上 0x1100 这块空间是没有申请的。这块空间上没有申明任何的变量,也就没有被零碎调配一块内存。因而是没有权限拜访的。这样的程序是有谬误的。
7.5 const 润饰指针
const 润饰指针有三种状况:
-
const 润饰指针:常量指针
const dataType* pointVariableName
指针自身能够扭转,然而指针指向的值不能通过指针扭转。
-
const 润饰变量:指针常量
dataType* const pointVariableName
指针自身不能够改,然而指针指向的值可扭转。
- const 即润饰指针又润饰变量 用两个 const 就能够了
const dataType* const pointVariableName
7.6 传址
指针能够作为参数传入函数。这种过程咱们成为址传递,又称为 传址。传址后就能够批改实参具体的值。
如果抉择将数组作为参数传入函数,有两种传法,一个是 int arr[]
,而数组能够看做是一个指针,因而也能够抉择用int* arr
的办法传入,这样他就作为一个指针传入了。