作业帮 > 综合 > 作业

指针的类型和指针指向的类型具体区别在哪里?看了很多书都是比较模糊的 希望能在2014-04-17 0

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/26 12:46:22
指针的类型和指针指向的类型具体区别在哪里?看了很多书都是比较模糊的 希望能在2014-04-17 0
你知道指针本身保存的是个地址,理论上地址都是一样的,没类型上的区别,比如32位的地址都是4字节长度,只是编译器在对指针运算时必须按对象所占内存空间的字节宽度递增和运算(字节对齐).
 
int a[100]={1,2,3,4,5,6,7,8,9.};
int *p=a;
比如一个int型变量占用4字节(类型数据宽度),那么一个int型数组中每个元素字节宽度为也都是4字节,指针p保存的是数组a的首地址(a就是指针指向的类型),假设a的地址为1000,现在执行p++,意思是指向下一个元素,因此p递增时需要按类型数据宽度递增,否则会错位.那么int型元素宽度为4,因此p++的实质是1000+4=1004,让p与每个元素对齐.而如果数组a为char类型,显然char的数据宽度为1,那么p++就是1000+1=1001.
 
为了保证编译器能正确进行指针运算,需要让编译器知道指针指向的是什么类型,以便对齐,因此编译器要求给指针定义类型,且指针的类型必须和被指向的数据类型匹配,那样编译器根据指针类型了解数据宽度是多少,然后进行正确的地址定位.