在字符数组维分析中构造字符数组

时间:2018-10-04 18:54:03

标签: c++ arrays

为什么我的字符数组不存储字符串?如果我声明一个具有特定大小的字符数组,然后在该数组中存储一个字符串,我是否能够创建一个具有特定长度的一维数组来存储多个字符串?由于字符串被认为是字符数组,并且字符串文字以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;
}

Demo

1 个答案:

答案 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]初始化它是从chara访问2个单独的b(请使用越界索引访问它们,请注意!请记住,数组使用基于 0的索引)。您无法将完整的字符串"Hi""Bye"存储到只能容纳2个char的一维数组中。

您可以使用以下方法来实现您的想法:

char* array[2] = {a, b};
  

从技术上讲,这不是数组算术也不是多维数组构造吗?字符数组没有被合并,也没有形成第二维?

正确。上面是在内存中创建一个数组,其元素是指向内存中其他位置的其他数组的指针。

如果您真的想要一个真正的二维数组,那么它将看起来更像这样:

char array[2][4] = {"Hi", "Bye"};

Live demo