我对C语法还很陌生,但这是我的问题:
我想创建一个存储多个浮点数组的指针。
据我所知,这是方法(?):
malloc
动态为其分配一些内存(用于数组)。int size = 100;
float *template[66]; //for 66 float arrays
malloc...
memset(&(template[i]), 0, size*sizeof(float));
需要一些有关代码序列的指导才能使其正常工作!
答案 0 :(得分:1)
您可以随时获取对象的地址,不需要指针变量来保存其地址。
到目前为止,对于您的要求,您可以为所有阵列分配一个内存块:
float (*p)[100] = malloc( sizeof(*p) * 66 );
给出66个100个浮点数的块。然后您可以循环初始化:
for (int i = 0; i < 66; ++i)
for (int j = 0; j < 100; ++j)
p[i][j] = 0.f;
如果函数需要第三个数组,则可以给它p[2]
(或&p[2]
),因此不需要任何变量来存储p[2]
,因为您可以随时通过以下方式获取它:写p[2]
。您只需要存储p
即可。
答案 1 :(得分:1)
如果所有大小都是已知的(在编译时),那么只需定义它们就可以创建这些数组。
分别:
float f00[100] = {0., /* 98 more floats */ 99.};
/* 64 more arrays */
float f65[100] = {0., /* 98 more floats */ 99.};
float * arrays[66] = {
f00,
/* 64 more arrays */
f65,
}
或一劳永逸:
float * arrays[66] = {
(float[100]){0., /* 98 more floats */ 99.},
/* 64 more arrays */
(float[100]){0., /* 98 more floats */ 99.},
}
或全部使用2D数组,并由此导出单个数组指针:
float array2d[66][100];
float * f00 = array2d[0];
/* 64 more float pointer here */
float * f65 = array2d[65];
或后者动态:
float (*array2d)[66][100] = malloc(sizeof *array2d);
float * f00 = array2d[0];
/* 64 more float pointer here */
float * f65 = array2d[65];
/* use it here */
free(array2d);
答案 2 :(得分:0)
代码将如下所示:
int size = 100;
int number_of_arrays = 66;
float *template[number_of_arrays ]; //for 66 float arrays
for(int i = 0; i< number_of_arrays; ++i){
template[i] = (float*)malloc(size * sizeof(float));
memset((template[i]), 0, size*sizeof(float));
}
您必须使用malloc分配每个单个数组,并将返回的指针分配给“数组数组”的第i个元素
内存集不需要“ template [i]”的“&”(引用),因为“ template [i]”已经是一个指针。
答案 3 :(得分:0)
int i;
/* this should really be const! */
const int number_of_arrays = 66;
const int size = 100;
/*
* I would recommend NOT using 'template' as a variable name.
* It's a reserved keyword in C++, so probably a good idea to avoid it!
*/
float* myTemplate[number_of_arrays];
for(i = 0; i < number_of_arrays; ++i)
{
/* allocate 100 floats */
myTemplate[i] = (float*)malloc(size * sizeof(float));
/* set all float values to zero */
memset(myTemplate[i], 0, size * sizeof(float));
}