这里是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
答案 0 :(得分:1)
您只能在声明时使用{ ... }
:
char * array[100][100]={1,2,3};
否则你必须逐个单元访问数组,或者使用结构和转换指针来搞乱一点
(顺便说一下,它给出了一个关于为一个指向char的指针赋值的警告)
答案 1 :(得分:0)
首先,您的类型char *myArray[100][100];
可能不正确,因为它声明了一个包含100个指向char
的100个数组的数组,并且您将这些指针设置为数值,例如{{1 },1
和2
。
使用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中详细了解它,但请注意,这些扩展程序不可移植。