2008-11-13 3 views
1
typedef struct { 
     nat id; 
     char *data; 
     } element_struct; 

typedef element_struct * element; 

void push(element e, queue s) { 
     nat lt = s->length; 
     if (lt == max_length - 1) { 
       printf("Error in push: Queue is full.\n"); 
       return; 
     } 
     else { 
       s->contents[lt] = e; 
       s->length = lt + 1; 
     } 
} 
int main() { 
     push(something_of_type_element, s); 
} 

"something_of_type_element"을 어떻게 포맷 할 수 있습니까?struct 형식의 값을 C의 함수에 전달

감사

노트

: NAT는 INT와 동일한

+1

이것은 제 생각이지만, 포인터 유형을 typedef로 설정하는 것이 다소 혼란 스럽다고 생각합니다. 명확성을 위해 구조체 만 typedef합니다. 그렇게하면 누군가가 코드를 읽고 포인터가 이미 typedef를 알지 않아도 처리되고 있음을 알 수 있습니다. – jdizzle

답변

1

:

element_struct foo = { 1, "bar" }; 
push(&foo, s); 

당신이 C99의 당신이 할 수있는 컴파일러가있는 경우 : 그것은이 정의하는 범위보다 더 오래 살 필요가있는 경우 구조에서 데이터를 복사해야

element_struct foo = { 
    .id = 1, 
    .data = "bar" 
}; 
push(&foo, s); 

참고. 그렇지 않으면 malloc (아래 참조)을 사용하여 힙에 메모리를 할당하거나 전역 변수 또는 정적 변수를 사용할 수 있습니다.

element_struct foo = malloc(sizeof (element_struct)); 

foo.id = 1; 
foo.data = "bar"; 
push(foo, s); 
+0

push()를 호출하는 함수 밖에서 큐 내용을 사용하려고하면 매우 이상하게 동작 할 것입니다. 이렇게 정의 된 구조는 스택에 저장되고 함수가 종료되면 소멸되기 때문입니다. – che

3

방법에 대해 : 여기에없는 메모리 관리를 많이가 있다는

element elem = malloc(sizeof(element_struct)); 
if (elem == NULL) { 
    /* Handle error. */ 
} 

elem->id = something; 
elem->data = something_else; 

push(elem, s); 

주 ...이처럼