主要与其他功能中的字符指针算法

时间:2017-12-12 18:50:55

标签: c pointers pointer-arithmetic

我正在处理一个练习问题,要求我删除字符串中的第一个字符。防爆。 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中所做的更改也应该使它成为主要的。为什么它没有那样工作?

1 个答案:

答案 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(); } 中的变化的原因。