2014-03-25 4 views
0

다른 질문이 있습니다. 배열을 [고정] [동적]으로 설정할 수 있습니까? 첫 번째 값은 파일의 판독기 (사용자가 사용하는 센서의 수)가되고 다른 값은 동적 배열 [읽는 시간]이됩니다.C에서 (고정) (동적) 2D 배열을 설정할 수 있습니까?

저는 2D 동적 배열에 대해 읽었습니다.하지만이 작업을 수행 할 수 있는지 여부는 알 수 없습니다. 어떤 조언?.

감사합니다.

+0

당신은 2-D VLA 할 수 있습니다 :'INT X [A] [B]''A'와' b '는 둘 다 변수입니다. 또는 다른 포스터에서와 같이 각 포인터가 길이가 b 인 배열을 가리키는 포인터의 1 차원 배열을 사용할 수 있습니다. 2 차원 배열과 동일하지는 않습니다. –

답변

2

물론 가능합니다 ... 포인터 배열을 선언하면됩니다. 그런 다음 mallocrealloc을 사용하여 각 요소에 저장된 하위 배열을 수정할 수 있습니다.

struct reading * data[num_sensors]; 

하지만 당신은 좀 동적 것에 대해 모두 크기를 얘기. 당신이해야 할 수 있습니다

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

[고정] [동적]으로 배열을 설정할 수 있습니까?

예. 뭔가를하고있는 것은 length(i)arr[i]의 길이를 돌려 보낼

int *arr[fixed]; 

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

을 좋아하여이를 달성 할 수있다.

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; 
}