LPCVOID 部类的参数值被修改
LPCVOID 类型的参数值被修改
C++中 LPCVOID的定义为:typedef CONST void far *LPCVOID;,根据其定义可以看出此类型的指针指向的值是不能改的,但实际上可以被修改(值和指针都可以被改,那const有什么意义呢),这是什么原因?
------解决方案--------------------
const只是编译器语法,都被你强转了还有什么好说的。
------解决方案--------------------
用const去修饰void*确实有点费解,因为void*总是要被强制转换才能用。
------解决方案--------------------
学习了,谢谢楼主!
------解决方案--------------------
在强制转换面前,const也无能为力啊,除非你传进来的内存地址是只读的。
形参表里const更多的是提示作用,加上后告知客户你的实现不会修改内存,而不是你修改不了。还一个,你要传递常量字符串之类的进来时,形参必须加const,此时你是无法修改的。
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.h typedef const void *LPCVOID;
------解决方案--------------------
const只是编译器语法,都被你强转了还有什么好说的。
------解决方案--------------------
用const去修饰void*确实有点费解,因为void*总是要被强制转换才能用。
------解决方案--------------------
学习了,谢谢楼主!
------解决方案--------------------
在强制转换面前,const也无能为力啊,除非你传进来的内存地址是只读的。
形参表里const更多的是提示作用,加上后告知客户你的实现不会修改内存,而不是你修改不了。还一个,你要传递常量字符串之类的进来时,形参必须加const,此时你是无法修改的。