我有一个关于指针的问题。当我在函数中使用指向char数组的指针遍历char数组时,原始数组保持不变,但是当我在主函数中执行它时,我无法打印char数组。
我对指点很陌生。
void f(char* a)
{
while (*a!=0) {
*(a++); // going through array
}
}
int main()
{
char* a1 = "test";
f(a1);
cout <<a1<<endl; // I can normally print out "test"
return 0;
}但,
int main()
{
char* a1 = "test";
while (*a1!=0) {
*(a1++);
}
cout <<a1<<endl; // won't print anything
return 0;
}所以我的问题是,即使我传递指向函数的指针,为什么原始数组不被修改呢?
发布于 2013-09-06 18:35:14
由于要递增指针a1,所以指针指向main循环末尾的字符'\0‘。打印空字符不打印任何东西(空字符串)。
使用函数执行此操作时,指针a是本地的,是函数的本地指针。它是在函数中修改的,但在main中没有更改。如果希望在这两个示例之间得到类似的结果,则必须更改函数以接受指向指针的引用参数:
void f(char * &a) { . . . }发布于 2013-09-06 18:34:15
f(a1);
在a1退出后不会修改f
然而,
while (*a1!=0) {
*(a1++);
}在cout之前
将使a1指向空字符,因此不会打印任何内容。
发布于 2013-09-06 18:34:46
调用函数时,您不会更改a1。您只需要更改传递给该函数的a1的副本:a
但是当您在主函数中调用a1++时,您正在更改a1,当它完成时,a1将是0或'\0'
https://stackoverflow.com/questions/18664300
复制相似问题