c++ - 使用指向字符的指针打印字符数组

标签 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;
}

但是,

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

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

最佳答案

由于您正在递增指针 a1,因此它指向 main 中循环末尾的字符“\0”。打印空字符不打印任何内容(空字符串)。

当你对函数执行此操作时,指针 a 是本地的,是函数的本地指针。它在函数内被修改,但在 main 中没有改变。如果您想在两个示例之间获得相似的结果,则必须更改函数以接受指向指针的引用参数:

void f(char * &a) { . . . }

关于c++ - 使用指向字符的指针打印字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18664300/

相关文章:

c - Valgrind memcheck 在商业库中发现大量条件跳转和无效读取

添加新值时,Java ArrayList 值将被重置

C++ 类析构函数在构造函数之后直接调用

c++ - '-std=c++11' 对 C++/ObjC++ 有效,但对 C 无效

c++ - C 风格的转换可以处理,但 C++ 转换不能

c - 奇怪的结果 : matrix multiplication using pthreads

c - 使用 'char' 类型输入的无限循环

c++ - Code::Blocks 无法找到标准库 header ?

java - 在java中对未知维数数组的第一列进行排序

arrays - 偏移独立散列函数