函数返回的是 指向 静态数据区 的指针,为什么 这样可以修改!???

cimu 2005-08-03 09:43:41
char* GetString()
{
char* p = "hello world!";
return p;
}

int _tmain(int argc, _TCHAR* argv[])
{


char* str = NULL;
str = GetString();

cout << str << endl;

str = "fsdaf";

cout << str << endl;

system("pause");
return 0;
...全文
149 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jagen在路上 2005-08-04
  • 打赏
  • 举报
回复
你只是修改了指针变量,而又没有修改指针所指向的内容,当然允许你了!
Bobby136 2005-08-04
  • 打赏
  • 举报
回复
char* str是个句柄
Bobby136 2005-08-04
  • 打赏
  • 举报
回复
char*是个句柄

char* str = NULL;
str = GetString();

cout << str << endl;//打印的应该是乱码
R9R9R9 2005-08-03
  • 打赏
  • 举报
回复
char* str = NULL;
str = GetString();//函数返回的是 指向 静态数据区 的指针
所以str指向的对象的内容不能修改,如:*str='a'就会出错
而本身str不是一个指针常量.所以str本身的值就可以修改..如:str = "fsdaf";

LoveYouJustOneDay 2005-08-03
  • 打赏
  • 举报
回复
char* str = NULL;
str = GetString(); // str本身的值可以修改, str指向的那片内存里存的东西不能修改
//你试试 str[0] = 'a';看看

看到_tmain( )就觉得不爽的很

megaboy 2005-08-03
  • 打赏
  • 举报
回复
str只不过一个普通字符指针,又不是指针常量,其值当然可以修改啊。

对于char* p = "hello world!";和str = "fsdaf";楼主千万别以为是把两个字符串分别赋予p和str,字符串常量其实是一个地址,以上只是分别把两个字符串常量的地址赋予p和str罢了。
  • 打赏
  • 举报
回复
str本身是变量,可变的
据个例子
int a=5;
a是可变的,5是不可变的
qhfu 2005-08-03
  • 打赏
  • 举报
回复
str = "fsdaf";
这里跟函数返回值好像没有什么关系吧?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧