使用指向char的指针打印字符数组

use*_*841 2 c c++ arrays pointers

我有一个关于指针的问题.当我在函数中使用指向char数组的指针遍历char数组时,原始数组保持不变,但是当我在main函数中执行它时,我无法打印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;
}
Run Code Online (Sandbox Code Playgroud)

但,

int main()
{
    char* a1 = "test";
    while (*a1!=0) {
    *(a1++);
    }
    cout <<a1<<endl; // won't print anything
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,即使我将指针传递给函数,为什么原始数组没有被修改?

E. *_*fat 5

由于你正在递增指针a1,它指向循环结尾处的字符'\ 0' main.打印空字符不会打印任何内容(空字符串).

使用函数执行此操作时,指针a是本地的,是函数的本地.它在函数内被修改但未被更改main.如果您希望两个示例之间有类似的结果,则必须更改函数以接受指针的引用参数:

void f(char * &a) { . . . }
Run Code Online (Sandbox Code Playgroud)