指针的类型和指针指向的类型具体区别在哪里?看了很多书都是比较模糊的 希望能在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.
为了保证编译器能正确进行指针运算,需要让编译器知道指针指向的是什么类型,以便对齐,因此编译器要求给指针定义类型,且指针的类型必须和被指向的数据类型匹配,那样编译器根据指针类型了解数据宽度是多少,然后进行正确的地址定位.
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.
为了保证编译器能正确进行指针运算,需要让编译器知道指针指向的是什么类型,以便对齐,因此编译器要求给指针定义类型,且指针的类型必须和被指向的数据类型匹配,那样编译器根据指针类型了解数据宽度是多少,然后进行正确的地址定位.
指针的类型和指针指向的类型具体区别在哪里?看了很多书都是比较模糊的 希望能在2014-04-17 0
任何类型指针指向的变量的类型相同才能进行比较,为什么任何类型的指针都可以和NULL进行比较?
指向void类型的指针可以存放指向任何类型的指针,但不能引用其自身是什么意思
“指针的类型是指向数组元素的指针”如何理解?
只有同一类型变量的地址才能存放在指向该类型变量的指针变量之中.这句话是对是错?
求解指向指针的函数和指向函数的指针用法区别和举例,
指针变量与其他类型变量的区别
电流表和电流计的区别这两个在指针指向上有区别吗?还有什么别的区别吗?
一个CStatusBar*类型的的指针指向一个bool型的变量是什么意思
指针“变量里面的值” 和 “指针地址的值” 和 “指针指向的值” 有什么区别?
指向函数的指针和指针型函数,搞不太懂啊!
常量指针和指针常量的区别