2014-10-10 65 views
0

我的代碼的簡化版本如下:獲取靜態分配的數組的地址到指針結構內

struct args { 
    int p; 
    int *A; 
}; 

typedef struct sort_args sort_args; 

void func(int A[], int p) 
{ 
    args new_struct = {&A, p}; 
    args *args_ptr = &new_struct; 
} 

我想轉換一個靜態的(我認爲這是術語)分配數組的指針,但是編譯器不斷投擲這些警告:

警告:初始化將指針整數,未作鑄造 [默認啓用] ARGS new_struct = {& A,p,R};

警告:(關於「new_struct.p」附近初始化) 警告[默認啓用]:初始化時將整數指針,未作鑄造 [默認啓用]警告:(近初始化爲「new_struct.A」) [默認啓用]

我在做什麼錯?

回答

1

你得到了參數向後。

args new_struct = {&A, p}; 

=>

args new_struct = {p, A}; 

你需要一個結構的成員初始化完全相同的順序,因爲它們出現在結構的聲明,或者你需要使用命名語法如下:

args new_struct = { .A = A, .p = p }; 

但是,這通常只用於提高具有更多成員的較大結構的代碼清晰度。

+0

我已將A切換到結構的末尾,並忘記在初始化行中切換順序。謝謝! – wegry 2014-10-10 14:45:49