sab*_*bir 4 c multidimensional-array
如何在多维数组中分配字符串值,将数组作为函数参数发送,并将其返回给main函数?我试过这个,但它给出了一个错误:
char a[250][250][250]; // does not work
a[][0][2] = "0"; // does not work
a[][1][2] = "0"; // does not work
char a[][2][2] = {"0", "1"}; // works
// error: expected primary-expression before ']' token
a[i][j][max] = add_func(a[i][j][], i, j);
Run Code Online (Sandbox Code Playgroud)
声明后你不能分配,但使用 strcpy()
char a[250][250][250];
strcpy(a[0][1],"0");
Run Code Online (Sandbox Code Playgroud)
或在声明时指定:
char a[250][250][250] = {"0","2"};
char a[][250][250] = {"0","2"};
Run Code Online (Sandbox Code Playgroud)
或者如果你想分配一个char.
a[i][j][k] = '0';
Run Code Online (Sandbox Code Playgroud)
其中i,j,k是小于250的任何值
In-general a[3][4][2]是一个三维数组,可以视为
a[3][4][2]:由3个二维数组组成,每个2-D数组由4行和2列组成.可以声明为:
char a[3][4][2] = {
{ //oth 2-D array
{"0"},
{"1"},
{"2"},
{"4"}
},
{ //1th 2-D Array
{"0"},
{"1"},
{"2"},
{"4"}
},
{ //2nd 2-D array
{"0"},
{"1"},
{"2"},
{"4"}
},
};
Run Code Online (Sandbox Code Playgroud)
注意:"1"表示两个字符,另一个字符为空('\ 0')字符.
如果是整数数组:
int a[3][2][3]=
{
{ //oth 2-D array, consists of 2-rows and 3-cols
{11, 12, 13},
{17, 18, 19}
},
{//1th 2-D array, consists of 2-rows and 3-cols
{21, 22, 23},
{27, 28, 29}
},
{//2th 2-D array, consists of 2-rows and 3-cols
{31, 32, 33},
{37, 38, 39}
},
};
Run Code Online (Sandbox Code Playgroud)
第二个错误:
对此a[i][j][max]char可以分配不是字符串,所以,
a[i][j][max] = '0' ; // is correct expression
Run Code Online (Sandbox Code Playgroud)
但
a[i][j][max] = "0"; // is not correct, wrong
Run Code Online (Sandbox Code Playgroud)
请阅读WhozCraig评论.你在堆栈中宣布巨大的记忆!
根据你的评论:
功能声明:
char add_func(char a[250][250][250], int i, int j); // function definition
Run Code Online (Sandbox Code Playgroud)
试试这样:
char a[250][250][250];
a[i][j][max] = add_func(a, i, j );
Run Code Online (Sandbox Code Playgroud)
要初始化字符串表,您可以使用花括号.并且最外层的维度(我不知道如何调用它)或者方块中最左边的数字是可选的.
所以这会奏效
char table[][3][10] = {
{"row1-col1", "row1-col2", "row1-col3"},
{"row2-col1", "row2-col2", "row2-col3"},
{"row3-col1", "row3-col2", "row3-col3"},
{"row4-col1", "row4-col2", "row4-col3"}
};
Run Code Online (Sandbox Code Playgroud)
你不需要打字table[4][3][10].编译器会计算它.大小table为120字节.因为内容都是你可以使用的字符串
char *table[][3] = ...
Run Code Online (Sandbox Code Playgroud)
这将节省20%的空间.
花括号只能用于初始化阶段.不是那之后.因此以下代码将无法正常工作.
a[][0][2] = "0";
Run Code Online (Sandbox Code Playgroud)