如何使用NULL声明和初始化多维数组

时间:2014-05-10 09:55:04

标签: c++ multidimensional-array

#include <stdio.h>

int main() {
    const char *number_groups[2][4][2] = {
        {
            {"5", "6"},
            {"5.0", "6.0"},
            {"5/1", "6/1"},
            {"15/3", "-12/-2"},
        },
        { // number_groups[1]
            {"-98765432109876543210", "98765432109876543210"},
            {"-98765432109876543210.0", "98765432109876543210"},
            {"-98765432109876543210/1", "98765432109876543210/1"},
            NULL // number_groups[1][3]
        }
    };
    printf("(number_groups[1][3] == NULL) == %d\n", number_groups[1][3] == NULL);
    return 0;
}

test the code

我想创建一个多维数组,其元素是c字符串的对。

如果我只是制作一个包含10个c字符串的数组,我可以用2个c字符串填充它,其他8个指针就是NULL s,但是如果我想制作一个更复杂的数组,就像我发布在这篇文章的顶部,我不知道该怎么做。 下面是初始化10个c字符串数组和10个数组的数组之间的区别示例:

#include <stdio.h>

int main() {
    const char* array[10] = { "/usr/bin/ls", "-l" };
    for (unsigned int i = 0; i < 10; ++i){
        printf("(array[%d] == NULL) == %d\n", i, array[i] == NULL);
    }

    const char* array2[10][2] = {
        {"aa", "bb"},
        {"bb", "cc"}
    };
    for (unsigned int i = 0; i < 10; ++i){
        printf("(array2[%d] == NULL) == %d\n", i, array2[i] == NULL);
    }
    return 0;
}

test the code

1 个答案:

答案 0 :(得分:0)

C风格的数组有点令人困惑和陈旧。它们只是将轴映射到数据块的简写。

在这个例子中,您可以看到(至少)有4种方式访问​​c风格数组中的相同元素:

#include <iostream>

using namespace std;

#define X_EXTENT 4

const char* array2[10][X_EXTENT];

int main() 
{
    int y = 5, x = 1;

    array2[y][x] = "hello";
    cout << array2[y][x] << endl;

    cout << *(array2[y] + x) << endl;

    cout << *(*(array2 + y ) + x) << endl;

    cout << *(reinterpret_cast<const char**>(array2) + y * X_EXTENT + x) << endl;

    return 0;
}