C++指针和数组基础

C++ pointer and array basics

代码:

#include <iostream>
using namespace std;

int main(int argc, const char * argv[]) {
    char testChar[] = {'a','b','c'};
    char *testPointer = testChar ;
    cout << testPointer << endl;
    return 0;
}

问题:

当我使用cout << mypointer,

  1. 为什么要打印数组的每一个字母,乱七八糟的(参考 最后输出)?我的假设是当我看到指针时 指向第一个字母然后打印第二个然后等等 在最后打印内容。
  2. 末尾乱七八糟的(参考输出),地址是什么?

评论:

输出:

abc 310 367 277_ 377   
Program ended with exit code: 0

当打印出一个字符串(或你的情况下的 char 数组)时,它必须以空字符终止 [=10=],否则 cout 将继续打印出位于内存中超过预期的字符串,直到它遇到空字符,或者它访问不允许读取的内存,这会导致分段错误。

正在打印的末尾的 "mess" 是位于紧靠 char 数组之后的内存位置中的值。

此外,在初始化 char testChar[] = "abc"; 之后,您实际上不需要 'char *testPointer = testChar' 语句,因为 testChar 本身就是数组第一个元素的地址。所以 cout << testChar << endl; 就可以了。