2016-08-18 5 views
1

구조체 배열을 만들고 싶습니다. 배열의 structs는 사용자의 파일/입력에서 읽습니다. I는 각 구조체의 각 어레이에 대한 공간을 할당구조체 내부의 배열 요소 액세스 (C 배열)

ptr = (ST*)calloc(lines, sizeof(ST)); 

(크기의 입력을받은 후)

struct student{ 
    char name[16]; 
    int *available; 
    int sum; 
}; 

typedef struct student ST; 

내가 구조체의 배열을위한 메모리를 할당 :

난 구조체를 선언 (루프 사용) :

ptr->available = (int*)calloc(lines, sizeof(int)); 

지금이 배열에 값을 넣고 싶습니다. 각 요소에 어떻게 도달합니까?

내가 시도 :

*((ptr+i)->(available+j)) = 1; 

하지만 컴파일러는 나에게 말한다 : error: expected identifier before ‘(’ (i와 j는 배열의 j 번째 요소 나 구조체 i 번째, 나는를 사용하여 인덱스 및 J 있습니다).

내가 뭘 잘못하고 있니?

답변

3

가독성을위한 배열 인덱스 표기법 고려해

ptr[i].available[j] = 1;

1

*(ptr + idx) 표기 잊어 (명시 포인터 연산을 이용하여 등가 구가 상당히 모호한 *((ptr + i)->available + j) = 1;이다); 그것은 '실제 코드'가 아니라 초보자를 혼동시키는 데 사용됩니다. 그러나, 당신은 그것을 사용해야하는 경우 :

*((ptr+i)->available+j) = 1; 

그러나 사용 :

ptr[i].available[j] = 1;