2017-06-15 64 views
0

我試圖將一個變量傳遞給一個函數並更改其全局值,但它不起作用。下面是簡化的代碼:將變量傳遞給一個函數並更改其全局值

int main() 
{ 
    int *Num = malloc (sizeof (int)); 
    ChangeValue(&Num); 
    printf("Number is %i\n", Num); 
} 


int ChangeValue(int *temp) 
{ 
    *temp = 10 
} 

的錯誤信息是:

 expected 'int *' but argument is of type 'int **' 

我試圖改變功能到int ChangeValue(INT **溫度)但收到以下錯誤:

 warning: assignment makes pointer from integer without a cast. 

有什麼建議嗎?

+2

'有什麼建議嗎?'閱讀錯誤信息。這很清楚...... – John3136

+1

@ John3136當你剛剛出發時,C很少。 – Schwern

回答

3

int *Num表示Num的類型爲int *。由於它已經是一個整數指針,所以當你將它傳遞給需要int *的函數時,不需要再次使用它的地址。

ChangeValue(Num); 

OTOH,因爲它是一個指針,你將不得不取消對它的引用與printf使用它作爲一個整數,等等。

printf("Number is %i\n", *Num); 
+1

謝謝你的回答。我做了你剛剛說的和代碼工作。但是,我收到了兩條警告消息。 警告:函數的隱式聲明'ChangeValue' 警告:'ChangeValue'的衝突類型 –

+1

@AfshinAhmadi C在使用函數之前必須知道函數的簽名。否則,它會猜測(這是隱含的警告),通常是不正確的,並且在它最終看到該函數並且它不符合它的猜測時會感到困惑。通過在main()之前移動ChangeValue()或在main()之前聲明ChangeValue()的原型來實現此目的。我建議前者,它更簡單,重複性更低。 – Schwern

+1

問題解決了。非常感謝你! –

2

變量Num是一個指向一個int(int*)。函數ChangeValue(int*)需要一個指向int的指針(int*)。但是,您正在向它傳遞一個指向Numint**)的指針。

簡短的回答:在ChangeValue(&Num);

朗答案Num之前刪除&:你似乎有了解如何工作的指針,你可能要在繼續之前閱讀更多有關這是一個問題。

+1

非常感謝,Tommalla。你是對的,我仍然是C編程新手。 –

相關問題