2008-11-13 56 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」?將結構類型的值傳遞給函數C

感謝

注: NAT是一樣的INT

+1

這只是我的看法,但我認爲它是相當混淆的typedef指針類型。爲了清楚起見,我只會鍵入結構體。這樣,讀取你的代碼的人會知道指針正在處理中,而不必知道typedef。 – jdizzle 2010-03-09 21:56:07

回答

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 2008-11-13 03:36:06

3

如何:

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

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

push(elem, s); 

注意,有很多內存管理在這裏失去了...