有关指针类型的定义问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 03:33:40
为什么在定义指针时要求必须和该指针所指向的变量类型相一致?是为了系统的寻找方便吗?还是这样要求是系统处理时有其他的原因?请高手指点!

这是肯定的,要知道指针变量存在着加减运算,指针就是地址,那么指针变量里面存放的就是指针(也就是地址)。请看:

int a[3]={1,2,3};
char b[3]={'a','b','c'0};

int *pi=a;
char *pc=b;

那么此时pi和pc里面其实都存放的是计算机内存地址,其实在32为的计算机中就是4个字节的数字,这4个字节的数字就表示了一个内存单元的具体地址。那么
如果我要访问a[0]可以这样*pi其实就是对a[0]的访问,如果要访问a[1]可以这样: *(pi+1) 。

同样对于字符数组b来说通过*pc可以访问到b[0]的值,通过*(pc+1)可以访问到b[1]的值,那么你有没有想过,整型数据占用的内存空间与字符数据是不一样的呢。整型数据占用的字节数字是与机器的字长有关的,例如在32为的机器上整型数据占用4个字节,也就是32为,在以前的dos机器上(也就是16位机器)整型数据占用2个字节,例如在turbo C下面编译int占用2个自己,char占用1个字节,在VC++ 6.0上编译int占用4个字节,char占用1个字节,这里我们以VC++ 6.0作为例子

pi+1之后就指向了数组的第二个元素,同样pc+1之后也只想了b数组的第二个元素,虽然他们都是指向了数组的第二个元素,但是他们移动的字节数是不一样的。

例如在b数组中,b[0]和b[1]他们是紧挨着的两个字节,而在a数组中a[0]和a[1]他们每个都占4个字节,所以&a[0]和&a[1]是相差4个字节的。

所以pi++和pc++他们移动的实际字节数不一样,这在谭浩强的书中都有详细的讲到。

那么一个指针有两部分组成,首先其是一个指针类型,其次其指向的是什么类型的数据,其指向的数据类型是区分不同指针的一个重要特征。

int * p; 与 char * p1; 中p和p1是不同的指针,他们一个事指向字符,一个是指向整形数据的。 当我们以*p和*p1来访问他们指向的内存单元时,编译器对他们的解释是不一样的,一个是将其指