我从网站上读到 *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)
它们不是同一件事。char[]将衰减到char*,因此对于cout << ch[0],使用的函数是std::ostream &operator<<( std::ostream &out, const char *str )。由于您的ch[][]数组没有任何空终止符,因此它会一直打印直到找到一个(您实际拥有的,在 UB 中)。你的恰好在“123456”之后结束,但没有任何保证。
char *cha[3]但是,包含三个char *s,并分配了三个 c 字符串,它们以空字符结尾。因此,正如您所料,它会打印“12”
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |