gpt4 book ai didi

Main 函数中的字符指针运算与其他函数中的字符指针运算

转载 作者:行者123 更新时间:2023-11-30 19:06:36 24 4
gpt4 key购买 nike

我正在解决一个练习问题,要求我删除字符串中的第一个字符。前任。 char *string = "Rudolph",调用removeFirst(string)后,string现在等于“udolph”。

我注意到,如果我在主程序中完成所有操作,我会得到输出“udolph”。这是我的代码:

int main() {
char *string = "Rudolph";
printf("%s\n", string);
//removeFirst(string);
string++;
printf("%s\n", string);
return 0;
}

但是,如果我要调用另一个函数,我的输出是 Rudolph。这是我的代码:

void removeFirst(char *string) {
if (string == "" | string == NULL)
return;
string++;
}

int main() {
char *string = "Rudolph";
printf("%s\n", string);
removeFirst(string);
//string++;
printf("%s\n", string);
return 0;
}

考虑到我正在使用指针,我认为我在removeFirst中所做的更改也应该使其进入main。为什么它不这样工作?

最佳答案

您正在更改为局部变量。 C是按值传递。被调用函数removeFirst() 中存在一个与string 具有相同值的char*。您对其进行更改,然后您希望在副本上所做的更改反射(reflect)在原始变量中。这里不会发生这种情况。这就是为什么你没有得到与之前的情况相同的结果。

string == "" 比较两个地址,而不是您可能期望的内容。

您可以进行这样的更改

removeFirst(&string);

void removeFirst(char **string) {
if (*string == NULL)
exit(1);
(*string)++;
}

然后在main()

printf("%s\n", string); 输出 udolph

在这种情况下,您传递指针变量的地址。现在,您可以通过访问被调用函数的局部变量string 中包含的内存来更改原始变量。这就是在 main() 中保留更改的原因。

关于Main 函数中的字符指针运算与其他函数中的字符指针运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47779615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com