图解C语言指针和指针类型是什么

指针就是变量,用来存放地址的变量(存放在指针中的值都当成地址处理)

图解C语言指针和指针类型是什么
通俗的讲,假设a和p都代表相同类型(如int)的变量,如何让这两个变量在内存中代表相同的地址空间呢?
先定义int p,然后p=&a(在p和a的前面加上各自的符号),这个这两个变量就代表一段相同的内存空间。

现在这个地址空间存的值是一个int类型(4字节)的数值(10)
下面是16进制显示的数值(10转化为16进制是a,16进制每两位代表1字节),根据Cpu大小端模式,读法应该是0x 0000000a
图解C语言指针和指针类型是什么

只要是个变量都会有地址,那么指针也有地址(也就是指针的指针)

指针p这个变量里存放的是 0x 00affe80 ,这个不就是变量a 的地址吗
图解C语言指针和指针类型是什么
图解C语言指针和指针类型是什么

*是间接访问操作符(先找到地址,再根据地址找到数)

使用用*p其实就是在使用变量a

变量有不同的类型,整型,浮点型等等。那指针有没有类型呢?

32位系统上一个指针变量占4个字节; 64位系统上一个指针变量占8个字节

图解C语言指针和指针类型是什么
指针强制为char类型转换后,发现char类型的指针p1和int类型的指针p里存放的值都是a 的地址
图解C语言指针和指针类型是什么
区别就是:char类型的指针p1每一次指针移动char类型(1个字节)的大小;int类型的指针p每一次指针移动int类型(4个字节)的位置。

从结果中我们不难看出,指针的类型决定了指针向前或者向后走一步有多大距离。