我们知道,指针变量存放的是一个数据地址的变量,那么为什么要区分指针变量的类型呢?原因有以下两点。
(1)决定指向空间的大小
#include <stdio.h>
int main()
{
int a=12345;
int *p=&a;
char *p2=&a;
printf("p=%p\n",p);//打印a的地址
printf("p2=%p\n",p2);//打印a的地址
printf("a=%d\n",*p);//取a的值
printf("a=%d\n",*p2);//取a的值
return 0;
}
运行结果:
可以看出,虽然定义的指针变量类型不同,但它们存放的都是a的地址,所以结果相等。而*p2的值发生了变化,打印出来的a的值等于57,与原先定义的变量a的值12345并不相等,原因是定义的指针变量类型与定义的变量的类型不一致,取值运算符号会根据指针变量类型访问不同大小的内存空间,int类型占4个字节,char类型占一个字节,char类型指针只能访问到一个字节的内容,访问不完全。
(2)决定了增量的,也就是偏移量。
#include <stdio.h>
int main()
{
int a=12345;
int *p=&a;
char *p2=&a;
printf("p=%p\n",p);//打印a的地址
printf("p2=%p\n",p2);//打印a的地址
printf("a=%d\n",*p);//取a的值
printf("a=%d\n",*p2);//取a的值
printf("p++=%p\n",++p);//p偏移后的地址
printf("p2++=%p\n",++p2);//p2偏移后的地址
return 0;
}