区别指针类型与所指对象的类型
2012-06-21 18:59
302 查看
看个例题
强制用一个char *类型的指针指向对象a,一般我们认为其代表的含义是:当通过指针b来访问对象a时,把对象a当成char类型的对象。
不幸的是,这个例子展示了这种习惯思维并不总是对的,运行结果为fffffff7.
像这种反常规思维的用法不属于良好的编程风格,应该极力避免。这个例子出自《程序员面试宝典》第二版5.4节例题3,中国某著名通信企业S公司2007年8月面试题。很多情况下中国的考试本质是为了淘汰,所以各种坑爹的题目也屡见不鲜了。不管怎样,运行结果就是这样。
这个例子比较积极的一面,在于提醒我们区分指针的类型和所指对象的类型。将一个unsigned int *类型的地址强制转化为一个char *类型的指针,导致的结果是对指针的运算产生影响:
#include <stdio.h> int main() { unsigned int a = 0xfffffff7; char *b = (char *)&a; printf("%08x\n", *b); return 0; }
强制用一个char *类型的指针指向对象a,一般我们认为其代表的含义是:当通过指针b来访问对象a时,把对象a当成char类型的对象。
不幸的是,这个例子展示了这种习惯思维并不总是对的,运行结果为fffffff7.
像这种反常规思维的用法不属于良好的编程风格,应该极力避免。这个例子出自《程序员面试宝典》第二版5.4节例题3,中国某著名通信企业S公司2007年8月面试题。很多情况下中国的考试本质是为了淘汰,所以各种坑爹的题目也屡见不鲜了。不管怎样,运行结果就是这样。
这个例子比较积极的一面,在于提醒我们区分指针的类型和所指对象的类型。将一个unsigned int *类型的地址强制转化为一个char *类型的指针,导致的结果是对指针的运算产生影响:
unsigned int p; unsigned int *a = &p; char * b = (char *)&p; a + 1表示p的地址加上1*sizeof(unsigned int) b + 1表示p的地址加上1*sizeof(char)在一些大牛写的代码中(比如linux kernel),经常遇到将指针强制类型转化为(char *),其目的就是为了确保指针运算是以字节为单位
相关文章推荐
- 解析C++普通局部变量与指针类型的对象变量的应用区别
- c++ 普通全局变量与指针类型的对象变量 应用区别
- 解析C++普通局部变量与指针类型的对象变量的应用区别
- [转]解析C++普通局部变量与指针类型的对象变量的应用区别
- 解析C++普通局部变量与指针类型的对象变量的应用区别
- c++中判断指针类型对象
- c++引用类型和指针类型的区别
- 类对象和类指针的区别
- const对象的指针和const指针的区别
- 指针是一个保存对象地址的变量,地址是一种数据类型
- C++ 类对象和 指针的区别
- 类的对象和类的指针的区别
- 编写程序读入一组string类型的数据,并将它们存储在vector中,再将vector对象复制给一个字符指针数组。
- JAVA中对象赋值与主数据类型赋值的区别
- 引用 指针和对象的区别
- java 对象类型Boolean与基本类型boolean的联系、区别
- 从js对象类型的判断,附call与apply方法的区别
- C++类中数据成员为类类型时,定义为对象还是定义为指针?
- C语言学习8:malloc返回的void*类型指针不可以做更改,free双重释放,二维数组的初始化和打印,a和a[0]和a[0][0]的区别,数组指针(*p)[3],指针数组*a[10],动态内存分配版约瑟夫环,动态分配版去空格和逗号处理,二级指针与二维数组互用
- 类对象和类指针的区别