为什么我的字符数组不存储字符串?如果我声明一个具有特定大小的字符数组,然后在该数组中存储一个字符串,我是否能够创建一个具有特定长度的一维数组来存储多个字符串?由于字符串被认为是字符数组,并且字符串文字以null结尾,所以如果我写
,我将需要考虑所有字符+ 1 char a[3] = "Hi"; char b[4] = "Bye";
然后用元素创建char数组
a[0] = 'H', a[1] = 'i', a[2] = '\0'
和b[0] = 'B', b[1] = 'y', b[2] = 'e', b[3] = '\0'
这些仍然是一维数组。
如果我创建一个数组char array[2] = {a[3], b[4]}
,这还不是一维数组吗? array[2] = {"Hi", "Bye"}
的内容也是如此。
从技术上讲,数组[2]为
array[0]= a[0] = 'H', a[1] = 'i', a[2] = '\0'
和array[1] = b[0] = 'B', b[1] = 'y', b[2] = 'e', b[3] = '\0'
从技术上讲,这不是数组算术也不是多维数组构造吗?字符数组没有被合并,也没有形成第二维?
编辑1:我知道它可以在多维数组中完成,但是我想知道是否有可能在1中完成?如果我用2个元素初始化一个数组,因此初始化为array [2],对于其中的元素,我用3个和4个元素初始化另一个字符数组。
所以从技术上讲,它是一个1x7(由1x3和1x4组成)矩阵,而2x41
编辑2: 为什么我认为我想要一维矩阵是因为它是一维的,而且我知道元素对应于定义的范围,所以我可以查看序列中的特定元素,而不是进行多个维度
编辑3: 当我尝试使用解引用运算符时,它说运行时错误,但它指向整个数组,而不是逐个元素?我的带有取消引用运算符的数组仍然不是1x7数组,而是2个元素的数组,其中的元素然后指向内部具有实际值的char数组?
#include <iostream>
using namespace std;
int main() {
char array1[3] = "Hi";
char array2[4] = "Bye";
char* array[2]= {array1, array2};
for(int i = 0; i <6 ; ++i) {
cout << "array[" << i << "]= " << array[i];
cout << endl;
}
return 0;
}
答案 0 :(得分:3)
如果我创建一个数组
char array[2] = {a[3], b[4]}
,这还不是一维数组吗?
是的
所以
array[2] = {"Hi", "Bye"}
的内容。从技术上讲
array[2]
应该是
array[0]= a[0] = 'H', a[1] = 'i', a[2] = '\0'
和array[1] = b[0] = 'B', b[1] = 'y', b[2] = 'e', b[3] = '\0'
不。 array
只能容纳2个char
。用a[3]
和b[4]
初始化它是从char
和a
访问2个单独的b
(请使用越界索引访问它们,请注意!请记住,数组使用基于 0的索引)。您无法将完整的字符串"Hi"
和"Bye"
存储到只能容纳2个char
的一维数组中。
您可以使用以下方法来实现您的想法:
char* array[2] = {a, b};
从技术上讲,这不是数组算术也不是多维数组构造吗?字符数组没有被合并,也没有形成第二维?
正确。上面是在内存中创建一个数组,其元素是指向内存中其他位置的其他数组的指针。
如果您真的想要一个真正的二维数组,那么它将看起来更像这样:
char array[2][4] = {"Hi", "Bye"};