2016-04-09 50 views
-1

所以我需要需要做哪些會從主要類別的數量,並通過把它分頻功能2.數除以2的一些限制

這是我到目前爲止有:

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

int main() 
{ 
    int num = 20; 
    divide(num); 
    printf(num); 
} 

void divide(int* a) 
{ 
    int prod = a; 
    int y; 
    y = prod/2; 
} 

我認爲,除非上面的代碼是錯誤的,否則我只會遇到麻煩。

謝謝!

+0

**請**在啓用警告的情況下進行編譯,並考慮** C編譯器發出的每個警告**爲由您**所做的**錯誤。 –

回答

4

這裏有兩個錯誤,不幸的是C使得製作相對容易。

首先,您需要將指針傳遞給divide,但是您當前正在傳遞一個正在轉換爲指針的整數。換句話說,您需要傳遞num的地址,而不是值num。總之,您需要使用divide(&num)而不是divide(num)

其次,你在divide中犯了類似的錯誤。您已接受指向一個整數的指針,a,然後您將a除以2. a不是整數。這是一個指向一個整數!如果您想操作a指向的值,則必須對其進行解引用。換句話說,你需要a* = *a/2;


作爲一個方面說明,你應該調整你使用的任何編譯器的警告。如果您將整數轉換爲指針或指向整數而不進行顯式強制轉換,所有主要編譯器都會發出警告。例如,如果您使用gcc,則可能需要使用-Wall -Wextra -pedantic標誌(或者閱讀gcc文檔並找到一些更適合您的標誌)。這看起來像gcc -o some_prog -Wall -Wextra -pedantic some_prog.cpp

+0

'a * = * a/2;'→'* a = * a/2;'。第三個錯誤:OP的'printf'是錯誤的。 –

+0

感謝作品和@CoolGuy修復它printf(「%i」,num); –

3

我認爲這是一個家庭作業問題。爲了將來的參考,當它是一個家庭作業問題時,你應該這樣標記它。

這個問題是關於指針。這裏的核心概念是divide函數將一個指向一個整數的指針。指針是內存中的一個位置 - 使用該指針,它可以直接進入該位置並修改其中的值。然後main()將能夠看到該值,而不需要從divide()返回。

第一步是寫分水嶺。我將包括評論來解釋每一步的作用。

void divide(int* a) 
{ 
    //go to the location in memory referenced by a and get the value 
    int aValue = *a; 

    //divide the value by 2 
    aValue = aValue/2; 

    //store the value in the memory location referenced by a 
    *a = aValue; 
} 

下一步是改變你的主要功能一點點。現在你傳遞divide()和整數。你需要傳遞一個整數指針。

請嘗試以下操作。 「&」運算符獲取變量的內存地址。

int main() 
{ 
    int num = 20; 
    divide(&num); 
    printf("%d\n", num); 
} 

注意,此計劃可能會遇到錯誤,如果它試圖除以2爲奇數,但對於你的例子這應該做的罰款。讓我知道任何其他問題。

+1

「_When這是一個作業問題,你應該這樣標記。」 - 不。此外,沒有標籤[標籤:家庭作業] –

+0

@CoolGuy所以也許'標籤'這個詞在這裏是錯誤的,但一般政策是,你應該清楚,這是作業的權利? – nhouser9

+0

@CoolGuy編輯,以反映您對printf的評論 – nhouser9