如何在C中创建数组的数组

py49o6xq  于 2023-01-04  发布在  其他
关注(0)|答案(4)|浏览(118)

使用普通的C语言,如果我有下面两个数组:

WCHAR depthUnits[2][10] = { _T("feet"), _T("metres") };
WCHAR speedUnits[3][10] = { _T("ft/min"), _T("m/min"), _T("m/s") };

我怎样才能创建一个名为allUnits的数组,并使用上面的内容填充它,使它的行为如下所示:

allUnits[0][0] = "feet";
allUnits[0][1] = "metres";
allUnits[1][0] = "ft/min";
allUnits[1][1] = "m/min";
allUnits[1][2] = "m/s";

因此,基本上allUnits是一个数组,该数组的每个元素本身也是一个数组,因此allUnits [0]引用depthUnits,allUnits [1]引用speedUnits。
谢谢。

dy2hfwbg

dy2hfwbg1#

听起来你正在寻找一个指向10个字符的数组的指针数组。而且你希望数组有2个元素。
这就像:

WCHAR (*allUnits[2])[10];
allUnits[0] = depthUnits;
allUnits[1] = speedUnits;

使用char代替WCHAR的示例:

#include<stdio.h>

int main()
{
    char depthUnits[2][10] = {"feet", "metres" };
    char speedUnits[3][10] = {"ft/min", "m/min", "m/s" };
    
    char (*allUnits[2])[10];
    allUnits[0] = depthUnits;
    allUnits[1] = speedUnits;
    
    puts(allUnits[0][0]);
    puts(allUnits[0][1]);
    puts(allUnits[1][0]);
    puts(allUnits[1][1]);
    puts(allUnits[1][2]);

    // Change feet -> Feet using depthUnits
    depthUnits[0][0] = 'F';
    
    // See that it also changed allUnits
    puts(allUnits[0][0]);
    
    return 0;
}

输出:

feet
metres
ft/min
m/min
m/s
Feet
weylhg0b

weylhg0b2#

可以像初始化任何其他数组一样初始化数组的数组。

WCHAR* depthUnits[] = { _T("feet"), _T("metres") };
WCHAR* speedUnits[] = { _T("ft/min"), _T("m/min"), _T("m/s") };
WCHAR** allUnits[] = { depthUnits, speedUnits };
z8dt9xmd

z8dt9xmd3#

WCHAR *allUnits[2][3];

/* ... */

allUnits[0][0] = depthUnits[0];
allUnits[0][1] = depthUnits[1];
allUnits[1][0] = speedUnits[0];
allUnits[1][1] = speedUnits[1];
allUnits[1][2] = speedUnits[2];
pvabu6sv

pvabu6sv4#

这里使用数组初始化,也许这就是你想要的:

#include <stdio.h>

int main(void)
{
  char* allUnits[][3] = {
    {"feet", "meters"},
    {"ft/min", "m/min", "m/sec"}
  };

  printf("0 0: %s\n", allUnits[0][0]);
  printf("0 1: %s\n", allUnits[0][1]);
  printf("1 0: %s\n", allUnits[1][0]);
  printf("1 1: %s\n", allUnits[1][1]);
  printf("1 2: %s\n", allUnits[1][2]);
}

相关问题