二维阵列索引分配

时间:2018-01-14 00:29:02

标签: c arrays 2d

这里是C的新手。我想像这样填充我的2D数组:

char * myArray[100][100]; // initialize 2D array

myArray[0] = [1,2,3]  // make the first element of that 2d Array an array

为什么这在C中不起作用?我不得不这样做吗?

myArray[0][0] = 1

myArray[0][1] = 2

myArray[0][2] = 3

2 个答案:

答案 0 :(得分:1)

您只能在声明时使用{ ... }

char * array[100][100]={1,2,3};

否则你必须逐个单元访问数组,或者使用结构和转换指针来搞乱一点

(顺便说一下,它给出了一个关于为一个指向char的指针赋值的警告)

答案 1 :(得分:0)

首先,您的类型char *myArray[100][100];可能不正确,因为它声明了一个包含100个指向char的100个数组的数组,并且您将这些指针设置为数值,例如{{1 },12。 使用3之类的声明或使用字符串char myArray[100][100]"1""Hello"。因为你使用数字,我想你的意思是前者。

话虽如此。你可以使用初始化列表来初始化数组作为其声明的一部分,它使用大括号:

"World"

这会将第一个数组的前三个元素初始化为1,2,3和所有其他元素到char myArray[100][100] = {{1, 2, 3}};

从C99开始,支持所谓的指定初始值设定项,您还可以使用它来指定初始化的索引。假设您要使用42初始化第三个数组的最后一个元素:

0

所有其他元素将再次初始化为零。

某些编译器(如GCC)支持非标准扩展,允许您指定索引范围:

char myArray[100][100] = {[2] = {[99] = 42}}

您可以在官方GCC documentation中详细了解它,但请注意,这些扩展程序不可移植。