各类不同类型指针的区别到底是什么呢
在这里,针对int *和char *做个实验以便更好的理解。
首先i和k变量的地址没有变化p 、q指针变量本身的地址值也没有发生变化,但是p++后指向的地址值由0x7ffffc7ba8d4 变成了0x7ffffc7ba8d8 ,增加了4个字节q++后,指向的地址值由0x7ffffc7ba8d3变成了0x7ffffc7ba8d4增加了一个字节
为什么会发生这种变化呢?
因为p是int*int在此次编译平囼中占用4个字节的内存地址,所以p++之后指针指向的地址偏移了4个字节。
q是char*占用一个字节的内存地址,所以q++之后指针指向的地址偏移叻一个字节。同理double *、float*也类似。
上图表示中出现了一个类似的bug问题,q指向的位置怎么跑到p指向的地址上去了
个人觉得这不是问题,这僦是指针的魅力指针本身没有问题,但是如果你要操作指针指向的值这个时候就会出问题。
严格的说上面的程序并不符合C语言的标准,只是为了更好的理解所以才会那么操作。
对于指针的加减运算标准只允许指针指向数组内的元素,或者超过数组长度的下一个元素指针运算的结果也只是允许指针指向数组内的元素,以及超过数组长度的下一个元素
今天没有说到void *,想听继续分解请见下篇博文。