C语言中,声明指针为什么要指定类型?
2012-06-08 19:22
316 查看
如题,C语言中,声明指针为什么要指定类型?
学8086汇编时,发现一个现象:
对于DB类型的数组,SI(源变址寄存器)只要INC一次,就能获取数组中下个元素的地址;
而对于DW类型的数组,SI 需要INC两次,才能获取数组中下个元素的地址;
本人认为:
SI可以当成指针,每次SI++,SI就指向下一个字节的空间地址。
对于元素占用空间非1个字节的数组,就要多搞几次SI++,直到指针移动的字节数为这个数组每个元素占用的空间大小。
内存空间最小单位为字节,指针移动的最小距离是1个字节。
在C语言中,指针的++操作就不需要自己计算指针到底要++几次,由编译器自动算好,都只要++一次就可以在数组中获取下个元素的地址,不分类型;
当然,前提是声明指针时指定了类型,例如:
pc++,指针指向下1个字节的内存空间的地址。
pd++,指针指向下8个字节的内存空间的地址。
结论:
声明指针时,指针类型决定指针移动的单位距离,也就是移动多少字节的内存空间的地址。
学8086汇编时,发现一个现象:
对于DB类型的数组,SI(源变址寄存器)只要INC一次,就能获取数组中下个元素的地址;
而对于DW类型的数组,SI 需要INC两次,才能获取数组中下个元素的地址;
本人认为:
SI可以当成指针,每次SI++,SI就指向下一个字节的空间地址。
对于元素占用空间非1个字节的数组,就要多搞几次SI++,直到指针移动的字节数为这个数组每个元素占用的空间大小。
内存空间最小单位为字节,指针移动的最小距离是1个字节。
在C语言中,指针的++操作就不需要自己计算指针到底要++几次,由编译器自动算好,都只要++一次就可以在数组中获取下个元素的地址,不分类型;
当然,前提是声明指针时指定了类型,例如:
char *pc, str[]="12345"; double *pd, num[]={1,2,3,4,5}; pc = str; pd = num;
pc++,指针指向下1个字节的内存空间的地址。
pd++,指针指向下8个字节的内存空间的地址。
结论:
声明指针时,指针类型决定指针移动的单位距离,也就是移动多少字节的内存空间的地址。
相关文章推荐
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ?
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?
- 第08天C语言(14):指针为什么要分类型
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?
- 为什么static成员的类型可以是类本身?又为什么非static成员被限定声明为其自身类对象的指针或引用?
- 为什么static成员的类型可以是类本身?又为什么非static成员被限定声明为其自身类对象的指针或引用?
- (总结)C++与java比较教程--7.2 C++中声明指针类型和指针数组(待补充)
- 使用python向C语言的链接库传递数组、结构体、指针类型的数据
- C++定义类时,为什么不能在类中声明自身类型的成员变量?
- C语言编程艺术--C语言中Union类型与指针
- [译】顺时针分析规则 —— 一种针对复杂变量声明的分析的方法(尤其是指针类型)
- C语言指针转换为intptr_t类型
- C语言:指针类型强制性转换
- 06-9 C语言中void类型指针的作用
- C语言有关指针的变量声明中的几个易错点
- C语言(Head First C)-5_1:使用多个源文件:数据类型和使用头文件声明函数
- C语言的不完整类型(incomplete type)和前置声明
- C语言的指针类型
- C专家编程之为什么C语言把数组形参当做指针:数组/指针实参
- c语言中的结构体指针类型的cast