【发布时间】:2018-09-03 05:18:45
【问题描述】:
大家好,我有一个关于将字符串传递给 C 中的函数的问题。我正在使用 CS50 库,我知道他们将字符串作为 char 数组(指向数组开头的 char 指针)传递,所以传递是通过参考。我的函数接收数组作为参数并返回数组。例如,当我更改函数中的数组元素之一时,此更改会按我的预期反映到原始字符串。但是如果我将新字符串分配给参数,函数会返回另一个字符串并且原始字符串不会改变。你能解释一下这种行为背后的机制吗?
#include <stdlib.h>
#include <cs50.h>
#include <stdio.h>
string test(string s);
int main(void)
{
string text = get_string("Text: ");
string new_text = test(text);
printf("newtext: %s\n %s\n", text, new_text);
printf("\n");
return 0;
}
string test(string s)
{
//s[0] = 'A';
s = "Bla";
return s;
}
第一个例子反映了 text 和 newtext 字符串的第一个字母的变化,但是第二个例子打印出 text 不变并且 newtext 为“Bla” 谢谢!
【问题讨论】:
-
请添加代码来说明您的意思。
-
请提供您的问题的Minimal, Complete, and Verifiable Example。我们 StackOverflow 非常愿意为您提供帮助,但如果您能发布一些代码和您遇到的错误,我们将不胜感激。
-
"通过引用传递" 不,C 没有通过引用传递。您正在按值传递指针。修改指针本身不会修改原始值,修改指向的数组但是修改相同的内存。
-
我不明白这个问题。您将
text作为一个指针传递给函数test,该指针被忽略并用作函数返回的局部指针变量。text没有任何反应,因此它会按照您输入的内容打印。注意:您注释掉了更改第一个字符的代码,使问题变得混乱,以及不清楚的“第一个和第二个示例”叙述。