如何创建一个存储多个数组的指针?

时间:2019-12-16 06:50:28

标签: c arrays pointers malloc

我对C语法还很陌生,但这是我的问题:

我想创建一个存储多个浮点数组的指针。

据我所知,这是方法(?):

  • 我必须创建某种指针才能从其他函数访问这些数组。
  • 使用malloc动态为其分配一些内存(用于数组)。
  • 我必须将其指向要创建的每个float数组。
int size = 100;

float *template[66]; //for 66 float arrays
malloc...
memset(&(template[i]), 0, size*sizeof(float));

需要一些有关代码序列的指导才能使其正常工作!

4 个答案:

答案 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));
}
相关问题