指针在我们的学习中非常常见,有些人只是了解指针的基本概念,却不知道他的原理,到时候使用起来一头雾水,接下来我将对指针做出一些解释说明。
一、数据是如何存储的:
我们初始化一个int变量a,变量a会存储到内存中,int是四个字节,一个字节是占一个地址的,看上面图一地址位(0x00F5FCEC),a的第一个字节就放在了这个地址中,后面的3个字节因为数据为0,但是是占据着几个位的。
二、指针是什么
指针是一个变量,它存储另一个变量的内存地址(首地址)。通过指针,你可以直接访问和操作存储在该地址的数据。
三、指针的大小是什么,uint8_t和uint32_t的指针区别到底是什么
无论是uint8_t、还是uint32_t的指针,他本身的大小都是固定的,指针储存的是数据的内存地址的首地址,而数据的每一个内存地址的大小是固定的 -- 64位。看上面图一地址位(0x00F5FCEC),就是这个数据的大小啦!
那是uint8_t、uint32_t的指针区别是什么呢?
-
指针类型:
-
uint8_t *
: 指向一个 8 位无符号整数的指针。 -
uint16_t *
: 指向一个 16 位无符号整数的指针。 -
uint32_t *
: 指向一个 32 位无符号整数的指针。
-
-
数据访问:
-
解引用:
-
使用
*ptr
操作符解引用指针时,将根据指针的类型访问相应大小的内存。-
uint8_t *ptr
解引用时会读取一个字节(8 位)。 -
uint16_t *ptr
解引用时会读取两个字节(16 位)。 -
uint32_t *ptr
解引用时会读取四个字节(32 位)。
-
-
-
步进访问:
-
当你通过指针进行数组访问时,指针会按数据类型的大小自动增量。
-
例如,若
uint8_t *ptr
指向一个字节数组,ptr++
将使指针移动到下一个字节。 -
若
uint16_t *ptr
指向一个 16 位的数组,ptr++
将使指针移动到下一个 16 位整数(即两个字节后)。 -
若
uint32_t *ptr
指向一个 32 位的数组,ptr++
将使指针移动到下一个 32 位整数(即四个字节后)。
-
-
-