目录
指针
指针,指的是指针变量,存放的是地址。
地址即是访问内存的一个编号,内存的大小为一个字节。
那么指针的大小又是多少呢?都一样吗?
我们可以看到运行结果,不管指针类型是什么,在32位平台下指针变量大小都为4个字节;
而在64位平台下则为8个字节。
那么既然大小和平做平台有关的话,我们为什么要区分指针类型呢?
指针类型
我们可以看到以上内存中的变化,当变量为int型时,创建啊int*型指针,用指针对其进行更改时可以访问一个int型的空间,可以将变量进行完整的更改;而当我们将指针设定为char*型时,我们只能访问一个char型空间,对其中的内容进行更改。
即 指针类型代表了可操作空间的大小 什么类型的变量就要用对性的指针类型。
野指针
野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。
所以我们使用指针时要对其进行初始化。
指针运算
指针加减
pa+i 表示 pa后的第几个元素,再加上 解引用操作符 * 便可对其进行访问。
上图中因为pa中存放的是数组的首地址,那么*( pa+i ) 便和arr[ i ] 操作类似。
减减用法也同样。
但若是 --i 则表示为pa之前的第几个元素
指针减指针
若两个指针指向同一空间:指针减指针的绝对值(也可低地址减高地址),结果为两个指针之间的元素个数。
我们可以看到,第一个元素的地址与第六个元素的地址之间有五个元素。
指针和数组
一般情况下数组名为首元素的地址,但与两个例外:
① sizeof ( 数组名 ) 表示的是整个数组的大小;
② &数组名 表示的是整个数组的地址
二级指针
我们也可对ppa进行解引用得到变量a的值。