#include "stdafx.h"
void TestFun(const char* &sz)
{
static char bbb[10];
sz = bbb;
}
void main(int argc, char* argv[])
{
char *aaa = "abcdefg";
TestFun(aaa);
}
这段代码的意思是把字符指针aaa传给TestFun,由TestFun给aaa重新赋值,使得aaa指向另一个地址,aaa本身可以改变,但我不希望在TestFun中aaa指向的地址的内容会发生改变,所以TestFun的参数中有个const修饰
VC2005就编译,错误提示如下:
error C2664: 'TestFun' : cannot convert parameter 1 from 'char *' to 'const char *&'
最简单的方法是给aaa加上const修饰,变为:
const char *aaa = "abcdefg";
这样改有个弊病,TestFun之后我还需类似aaa[0]=41;这样的操作的话就不行了,必须这样:
const_cast<char &>(aaa[0]) = 40; //把常量变成可以赋值的量;const_cast<>
另一种修改的办法是TestFun的参数中的const修饰去掉,这样就简单一些。但这就没法防止aaa指向的地址的内容在TestFun中受到不经意的修改。
备注:
char * & a; 相当于char **a; 不过引用加指针更方便一些 (C++中,如果在C中,只能用CHAR **);