2013-10-28 71 views
0

我有一個結構定義爲:
創建一個結構參數

typedef struct pt { 
    int x; 
    int y; 
}point; 

我也有一個壓棧函數聲明:

void push(point p); 

現在,每當我想調用這個函數,我可以請執行以下操作:

point p = {x_value, y_value}; 
push(p); 

我想知道這是否有一個不太麻煩的解決方法。有些東西可以使我能夠在一條線上做到這一點。也許是這樣的:

push((point){x_value, y_value}); 
+0

你試過推((點){x_value,y_value});'看看它是否有效? – rjp

+0

是的,我得到的錯誤:預期的主要表達式在'{'令牌 – user1925405

+0

在c你必須分配內存。 C++中的構造函數處理這個。你需要像下面的Tilman狀態那樣創建一個構造函數。 –

回答

3

你C99認爲作品的開箱即用的語法:

typedef struct { 
    int x; 
    int y; 
} point; 

push((point){ 42, 1337 }); 

什麼更好,r esulting文字就是一個左值,這樣你就可以在需要的情況下其地址你push()函數接受一個指針:

void push(point *p); 

// ... 

push(&(point){ 42, 1337 }); 

Demo here

6

定義 「構造」 功能:

point make_point(int x, int y) 
{ 
    point result = {x, y}; 
    return result; 
} 

然後

push(make_point(x, y)); 
+0

作爲一名C開發人員,我認爲這是一種反射:人們真的不認識到我們在1999年以後的生活? – 2013-10-28 15:58:01

+0

刪除了我對C++的評論。謹慎撤銷倒票? –

+1

當然。 [15個字符] – 2013-10-28 19:26:05