如何打印整个数组?

Jen*_*röm 0 c++ arrays pointers reference

所以我把向量和windows-api弄混了,有人建议我使用指向向量中第一个元素的指针作为函数的缓冲区。

我出去尝试用语法打印数组,然后打印了整个数组,现在我想知道为什么吗?

char test[10] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' };
std::cout << &test[0] << std::endl;
//output: abcdefghij
Run Code Online (Sandbox Code Playgroud)

编辑1:我发现使用数组名称进行打印也可以,但是由于使用引用语法以降序打印char数组的原因,此代码令我惊讶。但是,如果不使用refrenece语法,这不奇怪为什么吗?

for (int i = 0; i < 10; i++) {
    std::cout << &test[0] + i << " ";
}
//outputs: abcdefghij bcdefghij cdefghij defghij efghij fghij ghij hij ij j
Run Code Online (Sandbox Code Playgroud)

Ari*_*yck 5

&test[0] 是指向char的指针,指向数组中的第一个字符。

发送char *to cout等同于打印字符串。基础逻辑将开始将字符转储到屏幕,直到找到一个NULL字符,即char值为零的a。

正如其他人提到的那样,您很幸运,在数组结束后,您显然拥有零(未初始化的内存?)。否则,字符串打印机将一直运行直到找到一个为止。

  • 形式上,传递不指向以null结尾的数组的char *是未定义的行为。它可以*打印数据并在第一个'\ 0'处停止,但是由于允许编译器进行转换或由于OS处理内存访问的方式,它可能会做其他任何事情。 (2认同)