指针在子函数里面赋值为什么回到主函数又变回原来的值,求解答

qzk1993 2017-06-23 09:29:28
代码如图

#include<iostream>
#include<string.h>
using namespace std;
void replaceSpace(char *str, int length)
{
char* new_str = (char*)calloc(128,1);
strcpy(new_str, "hello world!\n");
str = new_str;

printf("after assignment:\n");
printf("str at %p\n", str);
printf("new_str at %p\n\n", new_str);
}
int main()
{
char* str=(char*)calloc(128,1);

printf("at main function:\n");
printf("str at %p\n\n", str);

replaceSpace(str, 128);

printf("exit from replaceSpace:\n");
printf("str at %p\n", str);

return 0;
}


运行结果如图


为什么str在replaceSpace函数里面的值变了,回到主函数又变回原来的值呢
...全文
755 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xx842678 2017-06-25
  • 打赏
  • 举报
回复
指针指向地址,不是赋值,地址不是值
kugeniha 2017-06-24
  • 打赏
  • 举报
回复
只是改变了形参的指向
paschen 2017-06-24
  • 打赏
  • 举报
回复 1
因为你的指针是按值传递的,函数中的形参只是实参的复制品,你在函数中修改的也只是一个复制品,不会影响外面的实参 如果要在函数中修改指针,需要传递指针的地址
ooolinux 2017-06-24
  • 打赏
  • 举报
回复
楼主可以利用指针写一个swap交换两个整数的函数,在main中:输出两个数,调用swap交换两个数,再输出两个数。 然后改写成交换两个指针变量的值,就容易理解为什么形参要用指针的指针了。
start_C 2017-06-23
  • 打赏
  • 举报
回复
你这个问题,是没考虑局部变量的作用域问题。局部变量,只在函数内存在,函数结束后就会消失。就是说你传进去一个地址,被调用函数中改变了这个地址,但是被调用函数结束后,这个地址是会消失的。所以,主函数中打印地址,肯定是不会改变的。另外,我感觉你有个指针的用法,你弄糊涂了。传递指针是为了在被调用函数中改变这个指针所指向的内容,这个指针的地址是没办法改变的。因为C语言的变元传递是值传递!传递指针说白了就是传递一个地址的值,但可以在被调用函数中改变这个指针所指向内容的值,而不是改变这个指针的指向!同时希望多交流,我也是C刚看完!QQ:1010256995。

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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