2008-11-13 83 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); 

注意,有很多内存管理在这里失去了...