简单的指针问题(我不知道为什么确切的解释使我难以理解)

时间:2019-04-17 14:37:07

标签: c++

这个例子看起来很简单,我不知道为什么确切的解释使我难以理解。

在以下示例中:

#include <cstdio>

void scan(char* p){
  printf("%c", *p++);
}

int main() {
  char str[] = "hi this is a test";
  char* p = str;

  while(*p != '\0'){
    printf("%c", *p++); //ok..
  // scan(p); //crash
  }

}

使用扫描功能时出现什么问题。也就是说,即使那是问题,为什么为什么p不会在外层递增?

2 个答案:

答案 0 :(得分:3)

  

ie为何即使在问题上,p在外部也不会增加?

您的函数在该指针的副本上进行操作,因此递增操作不会影响原始指针。

要实现通过引用传递该指针变量:

void scan(char*& p){
  printf("%c", *p++);
}

这里是working example online

答案 1 :(得分:0)

传递了p的副本,因此当您在此处增加副本时:

printf("%c", *p++);

您实际上并没有增加传入p的{​​{1}},因此为什么会遇到无限循环。如果您不传递指针的副本,而是传递引用,则可以使用它:

main