我正在处理一个练习问题,要求我删除字符串中的第一个字符。防爆。 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中所做的更改也应该使它成为主要的。为什么它没有那样工作?
答案 0 :(得分:1)
您正在更改为本地变量。 C是按值传递的。 char*
与string
具有相同值的removeFirst()
位于被调用函数string == ""
中。您对其进行了更改,然后您希望对副本所做的更改将反映在原始变量中。这不会发生在这里。这就是为什么你没有得到与之前相同的结果。
removeFirst(&string);
void removeFirst(char **string) {
if (*string == NULL)
exit(1);
(*string)++;
}
比较两个地址而不是您可能预期的内容。
您可以进行此类更改
main()
然后在printf("%s\n", string);
udolph
输出string
。
在这种情况下,您传递指针变量的地址。您现在通过访问被调用函数的局部变量main()
中包含的内存来更改为原始变量。这就是保留public interface interfaceClass{
void message();
}
中的变化的原因。