读书人

LPCVOID 部类的参数值被修改

发布时间: 2012-10-17 10:25:47 作者: rapoo

LPCVOID 类型的参数值被修改
C++中 LPCVOID的定义为:typedef CONST void far *LPCVOID;,根据其定义可以看出此类型的指针指向的值是不能改的,但实际上可以被修改(值和指针都可以被改,那const有什么意义呢),这是什么原因?

C/C++ code
#include "stdafx.h"#include "public.h"void constVarTest(LPCVOID pcNum){    *(int*)pcNum = 2; //LPCVOID虽有const修饰但还是可以修改其值    printf("in function a=%d\n", *(int*)pcNum );}int main(int argc, char* argv[]){    int a = 1;    printf("old a: %d\n", a);    constVarTest(&a);    printf("new a: %d\n", a);    return 0;}//public.htypedef const void *LPCVOID;


[解决办法]
const只是编译器语法,都被你强转了还有什么好说的。
[解决办法]
用const去修饰void*确实有点费解,因为void*总是要被强制转换才能用。
[解决办法]
学习了,谢谢楼主!
[解决办法]
在强制转换面前,const也无能为力啊,除非你传进来的内存地址是只读的。
形参表里const更多的是提示作用,加上后告知客户你的实现不会修改内存,而不是你修改不了。还一个,你要传递常量字符串之类的进来时,形参必须加const,此时你是无法修改的。

读书人网 >C++

热点推荐