为什么要将变量地址赋值给相同数据类型的指针变量
假设定义一个变量如下:
int a=0x11223344;
此时a占用4个字节,数据在内存中的保存形式如下:
将a的地址赋值给整型的指针变量
int* pa=&a;
将pa进行解引用,并对它进行赋值
*pa=0;
此时的内存四个字节全部变成0
说明修改正确,但是如果将a的地址赋值给一个字符型指针变量:
char* pb=&a;
再将pb解引用,并对原内存地址赋值0,看看结果如何
*pb=0;
可以看见只有第一个字节发生改变
结论:任何类型的指针类型都能保存地址,但是在解引用操作时就会出现可操作的内存字节数量和预期不一致的问题,
如果想按照某种数据类型通过指针进行操作,就将地址赋值给相应类型的指针;
从另外一个角度来理解,指针类型决定了指针进行算数运算时,指针跳跃的步长,如int型指针加一,执针指向第四个字节后的位置,而char型指针加一,只跳跃一个字节