这个例子看起来很简单,我不知道为什么确切的解释使我难以理解。
在以下示例中:
#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不会在外层递增?
答案 0 :(得分:3)
ie为何即使在问题上,p在外部也不会增加?
您的函数在该指针的副本上进行操作,因此递增操作不会影响原始指针。
要实现通过引用传递该指针变量:
void scan(char*& p){
printf("%c", *p++);
}
答案 1 :(得分:0)
传递了p
的副本,因此当您在此处增加副本时:
printf("%c", *p++);
您实际上并没有增加传入p
的{{1}},因此为什么会遇到无限循环。如果您不传递指针的副本,而是传递引用,则可以使用它:
main