2014-10-18 77 views
1

我有以下問題: 我需要初始化一個代表數字的stuct數字,因爲它需要包含它的值,除數和除數本身。要存儲除數,我需要使用一個指向整數數組的指針,這就是問題開始的地方。初始化一個指向整數數組的指針。

typedef struct { 
     int value; 
     int divisor_amount; 
     int (*divisors)[]; 
    } Number; 

現在既然我不提前知道我的數字有多少個因數我不能給一個數組長度。

在主函數中,我爲這些字段中的每一個賦值。對於前兩個變量,這是沒有問題的。

Number six; 
six.value = 6; 
six.divisor_amount = 3; 

現在指針我不知道如何初始化它。上課時就被告知這樣做,因爲:

six.divisors[0] = 1; 
six.divisors[1] = 2; 
six.divisors[2] = 3; 

但後來我從編譯器得到這個erroy:

[Error] invalid use of array with unspecified bounds

所以我想也許我需要分配一些空間和嘗試:

six.divisors = malloc(six.divisor_amount*sizeof(int)); 

但是,這給了我又一個錯誤:

[Warning] assignment from incompatible pointer type [enabled by default]

+3

'int(* divisors)[];'可能不是你想要的。如果你想有一個指向數組的指針,只需在初始化 – UnholySheep 2014-10-18 12:56:28

+0

期間寫入'int * divisors;'然後'malloc',我不能重現警告。由於'six.divisors'是一個(非函數)指針類型,這實際上應該可以工作。第一個片段的錯誤信息與'gcc -std = c99'相同,但是我沒有得到第二個片段。你如何編譯? – mafso 2014-10-18 17:10:26

+0

我使用devcpp與-Wpedantic打開。 – Actaeonis 2014-10-20 17:29:17

回答

3
int (*divisors)[]; 

是錯誤的,這是一個指向的數組int

使用

int *divisors; 

與此您malloc分配應該工作。

+0

@mafso,對,糾正。 – 2014-10-18 15:20:41

相關問題