小心const修饰的经过重新定义的(比如LPBYTE、PINT)指针的陷阱
来源:互联网 发布:unity3d 物体放大缩小 编辑:程序博客网 时间:2024/06/10 04:29
不知道大家用过LPBYTE、PINT等东西呢,他们的定义如下(以PINT为例):
typedef int near *PINT;(摘自windef.h)
去掉near和一些多余的空格,则:typedef int* PINT;
也就是说:PINT就是int*
那么看到下面的函数,你会想到什么?
void fun(const PINT pData){...}
你觉得上面的const有用吗?如果你想用上面的const修饰符来防止fun函数对pData进行写操作,就错了,你可以这样试试:
void fun(const PINT pData)
{
*pData = 1; //这句编译成功
int ii[16];
pData = ii; //这句编译出错
}
看到了吧!const修饰符根本没有起到对pData的写入操作,反而限制了对变量pData自身的修改!那么试试这样:
void fun(const int* pData)
{
*pData = 1; //这句编译出错
int ii[16];
pData = ii; //这句编译成功
}
显然,后面这样的定义,达到了限制对pData的写入操作,可见,const PINT和const int*是不一样的!前者相当于const (int*),而后者相当于(const int)*,所以可以认为,const (int*)里面的const修饰的是一个int指针,所以这个指针(pData)自身不能修改,而(const int)*里面的const修饰的是int数据,所以pData里面的数据是无法修改的。注:const (int*)和(const int)*这两种写法并不能通过编译,但我想不到更好的办法来表达他们的不同之处,或许我也没弄明白他们的区别。
- 小心const修饰的经过重新定义的(比如LPBYTE、PINT)指针的陷阱
- 常量定义(const)修饰指针变量的…
- const 修饰指针的问题
- const修饰的多级指针
- const修饰指针的用法
- C:带有const修饰的指针解读
- 关于const修饰指针的理解
- const 修饰指针的三种写法
- const修饰指针和引用的用法
- const修饰指针的一些细微差别
- const修饰指针和引用的用法
- const在修饰指针时的应用
- C:带有const修饰的指针解读
- const修饰指针和引用的用法
- const修饰指针和引用的用法
- const修饰指针时候的注意事项
- const 修饰指针的4种情况
- const关键字修饰指针的疑惑点
- Solaris IP configuration
- s60 3rd上使用自定义皮肤
- 在CentOS 5 下安装配置VNC
- Symbian程序中显示资源中定义的中文
- 学大型机的朋友能帮帮看这程序吗
- 小心const修饰的经过重新定义的(比如LPBYTE、PINT)指针的陷阱
- 关于oracle的自增 sequence
- VC中对输入设备的响应
- 批量测试 姚博文
- 2nd下J2ME安装研究和启动方法
- Java EE应用中的性能问题解决方案 — 第二部分 Java EE线程池调整优化(B)
- BADI实例
- 3GP格式转换为AMV格式
- 今天开通BLOG,以后准备把学习过程中的点点滴滴都记录下来,