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,此时你是无法修改的。