2017-10-28 175 views
1
int* dividers_of(int x, int ammount){ 
int i,j = 1; 
int* dividers = (int*)calloc(ammount,sizeof(int)); /* calloc initializes int array to 0!*/ 

for(i=0;i<ammount;i++){ 

    while((x%j) != 0){ 
     j++; 
    } 

*(dividers+i) = j; 

/*DOESNT WORK (int* dividers stays on 0-0-0) 
*dividers = j; 
dividers++; */ 

j++; 
} 
return dividers; 
} 

我試圖找出什麼地方錯了還是不行,我的陣列中分配int j*dividers,然後使dividers點到下一個int的代碼。結果應該是指向包含int xint分隔符的數組的指針。指針遞增

不幸的是,如果我不喜歡這樣的結果是以下數組:

dividers[] = {0,0,0}; 

這意味着一切都沒有改變,因爲calloc填補這樣的陣列。

請告訴我在

*dividers = j; 
dividers++; 

發生了什麼?

+0

它的拼寫'amount',而不是'ammount'。 – melpomene

+0

不要[調用'calloc'的結果](https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc)。 – melpomene

+0

1/**我們不能重現這個問題**這是新手常見的問題,所以請閱讀本網站幫助中心的常見問題解答,以便學習如何編寫問題以便讓其他人重現(並因此實驗)這個問題。我完成了直接鏈接到該部分。如果我們要談論禮貌,那麼在您發佈之前,您應該閱讀整個部分。忽略這樣的社區標準是無禮的。 – Sebivor

回答

0

如果在循環增量dividers

dividers++; 

那麼它不會有在結束其原始值:

return dividers; 

隨着增量,你的函數返回一個指針過去數組的結尾,而不是指向數組的開始的指針。

解決這個問題的最簡單的方法是將原來的指針保存在另外一個變量在開始:

int *dividers = ...; 
int *dividers_start = dividers; 

/* ... modify dividers here ... */ 

return dividers_start; 

但你也可以使用指針運算撤消增量:

return dividers - ammount; 
+0

數組的值會發生什麼? – Aditya

+0

@ADITYA什麼數組? – melpomene