指针的本质:
我们已知数据的存储是放在内存之中,但计算机内存有限,而有的数据所占空间又很大,此时就需要定义一个地址,此地址对应的内存用来存放数组的值。可以将地址比作钥匙,而数值就是钥匙对应的箱子,我们只要有了钥匙就可以找到并打开箱子,取得数值。
在内存中一个地址对应一个空间,空间中可以存放数值。
我们可以通过指针来找到内存中存储的信息。可以说只要有了指针就可以更快地找到数值。
指针的大小:
32位平台下(x86环境): 指针的大小为4个字节
64位平台下(x64环境): 指针的大小为8个字节
指针的加减运算:
1.指针+-整数(本质是指针跳过指向元素类型的大小)
如图:指针a指向数组首元素,数组中每个元素的大小为4个字节,当指针进行+1操作时,表示指针的指向向后跳过4个字节,原来指向8后跳过一个字节指向1.注意*优先级大于+
于是我们在进行对地址对应元素访问时,可以采用指针加上数字.如下图:
指针每次加1,则向后跳过一个int型,这样也可以达到遍历数组的效果
2.指针+-指针(前提是:两个指针必须指向同一个空间)
可见数组指针减数组指针等于指针间的个数。
指针和数组:
数组名是数组首元素的地址
但是有两个例外:
1.sizeof(数组名),这里的数组表示整个数组所占空间的大小,单位:字节
2.&数组名,这里的数组名表示整个数组,取出的地址是整个数组的地址
&arr+1相当于数组指针加上一个数组大小的值
arr[i]、*(p+i)、*(arr + i)是完全等价的,p等价于arr(数组首元素的地址),当要通过地址来调取存储的数值时要采用 ' * '解引用操作符。