消息关闭
    暂无新消息!
代码如图

#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函数里面的值变了,回到主函数又变回原来的值呢

4个回答

︿ 2
因为你的指针是按值传递的,函数中的形参只是实参的复制品,你在函数中修改的也只是一个复制品,不会影响外面的实参

如果要在函数中修改指针,需要传递指针的地址
︿ 1
楼主可以利用指针写一个swap交换两个整数的函数,在main中:输出两个数,调用swap交换两个数,再输出两个数。
然后改写成交换两个指针变量的值,就容易理解为什么形参要用指针的指针了。
︿ 1
你这个问题,是没考虑局部变量的作用域问题。局部变量,只在函数内存在,函数结束后就会消失。就是说你传进去一个地址,被调用函数中改变了这个地址,但是被调用函数结束后,这个地址是会消失的。所以,主函数中打印地址,肯定是不会改变的。另外,我感觉你有个指针的用法,你弄糊涂了。传递指针是为了在被调用函数中改变这个指针所指向的内容,这个指针的地址是没办法改变的。因为C语言的变元传递是值传递!传递指针说白了就是传递一个地址的值,但可以在被调用函数中改变这个指针所指向内容的值,而不是改变这个指针的指向!同时希望多交流,我也是C刚看完!QQ:1010256995。