C语言中的三维字符数组
我想声明一个三维字符串数组 其中每行有两个字符串 在此,我可以宣布:C语言中的三维字符数组,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,我想声明一个三维字符串数组 其中每行有两个字符串 在此,我可以宣布: char *szArray[][2] = { {"string1", "string2"}, {"string3", "string4"}, {"string5", "string6"}, {0, 0} }; 我想做同样的事情,但行数是动态分配的 这里您可以假设第一维度是动态决定的。 第二维度是2, 第三维度是25 在许多方面都尝试过,但没有运气 提前感谢!我没有收到任何错误: #includ
char *szArray[][2] = {
{"string1", "string2"},
{"string3", "string4"},
{"string5", "string6"},
{0, 0}
};
我想做同样的事情,但行数是动态分配的
这里您可以假设第一维度是动态决定的。
第二维度是2,
第三维度是25
在许多方面都尝试过,但没有运气
提前感谢!我没有收到任何错误:
#include <stdio.h>
int main(){
char *szArray[][2] = { {"string1", "string2"}, {"string3", "string4"}, {"string5", "string6"}, {0, 0} };
printf("%s\n", szArray[0][0]);
printf("%s\n", szArray[2][0]);
}
但是您无法打印szArray[3][0][0],因为它是0,如果您想将值初始化为任何值,可以将其设置为“\0”,而不仅仅是0我没有收到任何错误:
#include <stdio.h>
int main(){
char *szArray[][2] = { {"string1", "string2"}, {"string3", "string4"}, {"string5", "string6"}, {0, 0} };
printf("%s\n", szArray[0][0]);
printf("%s\n", szArray[2][0]);
}
但是您不能打印szArray[3][0][0],因为它是0。如果您想将值初始化为任何值,可以将其设置为“\0”,而不仅仅是0好的,这里没有编译器进行双重检查,但您可以通过多种方法来执行此操作。最直接的方法是声明char[25][3]的向量并且让C++来为你做一些事情,比如向量FO,然后只是推回你的动态元素。但是,如果没有编译器,我不确定这会起作用,因为当涉及多维数组时,你可以有一个时髦的规则。你总是可以把数组作为一个第一遍去量度,以便让它工作得更好。向量,然后开始添加你想要的。你也可以使用向量-向量-向量-字符的方法,使用锯齿形字符数组,其中和的3维可以是动态的,这可能会更节省内存。这里有很多选择。好的,这里没有编译器进行双重检查,但是你可以用很多方法来完成。最简单的方法是最重要的是声明char[25][3]的向量并且让C++来为你做一些事情,比如向量FO,然后只是推回你的动态元素。但是,如果没有编译器,我不确定这会起作用,因为当涉及多维数组时,你可以有一个时髦的规则。你总是可以把数组作为一个第一遍去量度,以便让它工作得更好。向量,然后开始添加你想添加的内容。你也可以使用向量-向量-向量-字符的方法,使用锯齿形字符数组,其中和的三维可以是动态的,这可能会更节省内存。这里有很多选择。首先,你的问题不是三维字符数组指向
char
的二维指针数组。在C语言中,指针和数组不是一回事
为了回答您的问题,现代C语言C99中最简单的方法是使用可变长度数组VLA,用于您的目的
char szData[x][y][z];
其中,x
、y
和z
是仅在运行时点击该声明时确定的变量或表达式
VLA的不便之处在于,您必须小心它们对于堆栈来说不会太大,并且必须通过分配给各个条目(这里是通过嵌套的for
-循环)来初始化它们
继续使用字符串的二维数组示例
char* szData[x][y];
然后您必须将单个字符串分配给每个指针,或者将它们设置为0
for (size_t i = 0; i < x; ++i)
for (size_t j = 0; j < y; ++j)
szData[i][j] = 0;
(大小i=0;i
对于(尺寸j=0;j
首先,你的问题不是一个三维的字符数组,而是一个指向字符的二维指针数组。在C语言中,指针和数组不是一回事
为了回答您的问题,现代C语言C99中最简单的方法是使用可变长度数组VLA,用于您的目的
char szData[x][y][z];
其中,x
、y
和z
是仅在运行时点击该声明时确定的变量或表达式
VLA的不便之处在于,您必须小心它们对于堆栈来说不会太大,并且必须通过分配给各个条目(这里是通过嵌套的for
-循环)来初始化它们
继续使用字符串的二维数组示例
char* szData[x][y];
然后您必须将单个字符串分配给每个指针,或者将它们设置为0
for (size_t i = 0; i < x; ++i)
for (size_t j = 0; j < y; ++j)
szData[i][j] = 0;
(大小i=0;i
对于(尺寸j=0;j
int n=0;
printf(“输入行数\n”);
scanf(“%d”和“&n”);
char***szData=(char***)malloc(n*sizeof(char**));
//为每行分配memroy
对于(int i=0;i
int n=0;
printf(“输入行数\n”);
scanf(“%d”和“&n”);
char***szData=(char***)malloc(n*sizeof(char**));
//为每行分配memroy
对于(int i=0;i