我可以将C上的2D数组设置为(固定)(动态)吗?

时间:2014-03-25 03:31:24

标签: c arrays dynamic-arrays

我有另一个问题。我可以将数组设置为[fixed] [dynamic]吗?,第一个值是来自文件的读取器(用户使用的传感器数量),另一个值是动态数组[读取时间]。

我正在阅读有关2D动态数组的内容,但我不知道我是否可以这样做。有什么建议吗?。

感谢。

3 个答案:

答案 0 :(得分:2)

  

我可以将数组设置为[fixed] [dynamic]吗?

是。您可以通过执行类似

之类的操作来实现此目的
int *arr[fixed];

for (i = 0; i < fixed; i++) {
    arr[i] = malloc(length(i) * sizeof(int));
}

length(i)将返回arr[i]的长度。

答案 1 :(得分:2)

当然可以......只需声明一个指针数组。然后,您可以使用mallocrealloc修改存储在每个元素中的子数组。

struct reading * data[num_sensors];

但你有点谈论这两个维度是动态的。您可能需要:

struct reading ** data = malloc(sizeof(struct reading*) * num_sensors);

答案 2 :(得分:0)

你可以这样做:

#include <stdio.h>
#include <string.h>

#define FIXED 20
int main()
{
    /*Array of integer pointers*/
   int *pi4_arr[FIXED]; 
   int i4_dyn_length= 0;
   int i4_ctr = 0;

   printf("Enter the dynamic length of array:");

   /* Make sure to enter this value greater than 1 or,  program*/
   /*  will crash at assignment before printf before the return*/
   scanf("%d",&i4_dyn_length);  

   for(i4_ctr =0; i4_ctr < FIXED; i4_ctr++) 
   {
       pi4_arr[i4_ctr] = malloc(i4_dyn_length * sizeof(int));
   }/*for(i4_ctr =0; i4_ctr < FIXED; i4_ctr++) */

   pi4_arr[0][0] = 1;
   printf("\n\npi4_arr[0][0]: %d",pi4_arr[0][0]);

   /*Make sure to call free before exit, to avoid memory leak */
   return 0;
}