char ch[][] 和 char *ch[] 是否相同

0 c++ arrays char

我从网站上读到 *ch[] 在实际的二维数组或字符中,但是当我自己在 C++ 中编写二维数组时,结果是不同的。谁能描述为什么会这样?

这是我的代码:

#include <iostream>
using namespace std;
int main()
{
    char ch[3][2] = {{'1','2'},{'3','4'},{'5','6'}};
    cout<<ch[0]<<endl;
    char *cha[3] = {"12","34","56"};
    cout<<cha[0];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它正在返回:

123456
12
Run Code Online (Sandbox Code Playgroud)

Chr*_*sMM 5

它们不是同一件事。char[]将衰减到char*,因此对于cout << ch[0],使用的函数是std::ostream &operator<<( std::ostream &out, const char *str )。由于您的ch[][]数组没有任何空终止符,因此它会一直打印直到找到一个(您实际拥有的,在 UB 中)。你的恰好在“123456”之后结束,但没有任何保证。

char *cha[3]但是,包含三个char *s,并分配了三个 c 字符串,它们以空字符结尾。因此,正如您所料,它会打印“12”