我做了大量研究,发现初始化二维数组字符的常用方法是
char *strings[2][50];
但这不一样,
char strings[2][50]; //not a pointer.
这两行代码有什么区别?我知道一个是指针而另一个不是。但是,实际上,如果你知道绑定([boundX][boundY])
的数组的大小,为什么你会使用指针代替?哪个代码更实用,为什么?谢谢。
编辑:我正在尝试创建一个字符串数组。
答案 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
是一个字符串数组