65,210
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <string>
using namespace std;
int *pNum = NULL;
void myfun(const int &rNum)
{
int *p = (int*)&rNum;
*p = 200;
pNum = (int*)&rNum;
}
char *GetString()
{
char *p = "hello ABC";
return p;
}
int main(int argc, char* argv[])
{
int num = 10;
myfun(num+2);//产生临时int类型变量
cout<<*pNum<<endl;
char *p = GetString();
cout<<p<<endl;
*pNum = 1024;// 这里可以修改.
strcpy(p,"Test"); //这里为什么不能修改呢?
return 0;
}
http://baike.baidu.com/view/2129184.htm?fr=ala0_1_1
四、常引用
【例】:假设有如下函数声明:
string foo( );
void bar(string & s);
那么下面的表达式将是非法的:
bar(foo( ));
bar("hello world");
原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。
引用型参数应该在能被定义为const的情况下,尽量定义为const 。
char *GetString()
{
char szBuffer[]= "hello ABC";
return szBuffer;
}
char *const 和 const char* 的区别吧 myfun(num+2);//产生临时int类型变量int temp = num+2 的生命期是到主函数结束,故可以继续使用,而char *p = "hello ABC";char *p 在该函数返回时生命期就结束了,故不能继续使用。myfun(num+2);//产生临时int类型变量int temp = num+2 的生命期是到主函数结束,而char *p = "hello ABC"; char *p 在该函数返回时生命期就结束了。