指针顾名思义就是一个指向某个位置的指针,例如钟表和车子的时速表,都有指针,指向的是一个时间或者速度,这里时间和速度就是指针指向的值。
在C语言中,指针是可以用一个十六进制的数值表示,例如0x0efdeee4523df,0x434564df6f6343
指针是可以进行运算的:
指针递增:
对于指向int类型数值的指针0x00000000000004,对其进行+1的操作后,指针变成0x00000000000008
对于指向long类型数值的指针0x00000000000012,对其进行+1的操作后,指针变成0x0000000000001a
对于指向short类型数值的指针0x00000000000210,对其进行+1的操作后,指针变成0x00000000000212
对于数组 int arr[3] = {100,200,300}; int *ptr;
取arr的地址是ptr = &arr,此时&arr实际上就是数组中第一个元素指向的地址,所以一般取数组地址直接写作ptr = arr;
对&arr地址进行+1的操作后,指针实际上移动了12个字节,就是sizeof(arr)的大小;
但是对arr地址进行+1的操作,指针实际上移动了4个字节,就是sizeof(int)的大小;
对指针的递增,实际上是改变了指针所指向的内存单元,+1就是指向下一块内存。
指针递减:
对于指针递减,根据指针递增的原理,递减就是减去对应的类型所占字节大小。
指针的每一次递增,它其实会指向下一个元素的存储单元。
指针的每一次递减,它都会指向前一个元素的存储单元。
指针在递增和递减时跳跃的字节数取决于指针所指向变量数据类型长度,比如 int 就是 4 个字节。
来自https://www.runoob.com/cprogramming/c-pointer-arithmetic.html
网友评论