c ++中2D字符数组

时间:2016-03-05 10:30:20

标签: c++ arrays

我做了大量研究,发现初始化二维数组字符的常用方法是

    char *strings[2][50];

但这不一样,

    char strings[2][50]; //not a pointer.

这两行代码有什么区别?我知道一个是指针而另一个不是。但是,实际上,如果你知道绑定([boundX][boundY])的数组的大小,为什么你会使用指针代替?哪个代码更实用,为什么?谢谢。

编辑:我正在尝试创建一个字符串数组。

2 个答案:

答案 0 :(得分:-1)

第一个表达式为您提供了两个指向长度为50的字符串的指针。

如果长度为50,第二个给你两个字符串。

这完全取决于你想对这些字符串做什么:它们是高级的,固定的还是变量的,你想对它们使用字符或字符串操作。

如果使用 string.h 中定义的任何字符串函数,最好使用指针形式,因为它们只将字符串指针作为参数。

答案 1 :(得分:-1)

字符(A)的二维数组与字符串数组(B)不同。

在第一行:char *strings[2][50];,您需要为这些字符分配内存。你只宣称2个指针。

在第二行:char strings[2][50]您已经在分配内存。

要小心,因为在任何一种情况下,您将获得空终止字符串。在使用它们之前,您需要正确初始化值。另外,在第二种情况下,如果你犯了一个错误,第一个字符串可能会超过第二个字符串。

在现代C ++中,最好使用std :: string和std :: array。它将使您的代码更安全。我建议如下:

第一种情况:std::array< std::array<char, 50>, 2> case1是数组数组

第二种情况:std::array< std::string, 2> case2是一个字符串数组