2014-01-23 24 views
3

我一直在C語言程序設計中學習C語言中的朋友推薦的書。書名爲「C語言編程」由Stephen Kochan提供。感受一種被「C語言編程」困惑的書(Stephen Kochan)

我有一個Java的背景,對於代碼寫在Stephen書中的方式我感到有點瘋狂。例如,下面的代碼,我在其中評論我的困惑。也許我失去了一些重要的東西在這裏,所以我期待聽到關於C.

#include <stdio.h> 

void test(int *int_pointer) 
{ 
    *int_pointer = 100; 
} 

int main(void) 
{ 
    void test(int *int_pointer); // why call the test() function here without any real argument? what's the point? 
    int i = 50, *p = &i; 

    printf("Before the call to test i = %i\n", i); 

    test(p); 
    printf("After the call to test i = %i\n", i); 

    int t; 
    for (t = 0; t < 5; ++t) // I'm more used to "t++" in a loop like this. As I know ++t is different than t++ in some cases. Writting ++t in a loop just drives me crazy 
    { 
    if (4 == t) // isn't it normal to write "t == 4" ?? this is driving me crazy again! 
     printf("skip the number %i\n", t); 
    else 
     printf("the value of t is now %i\n", t); 
    } 

    return 0; 
} 
+0

'void test(int * int_pointer);'不需要 –

回答

1

編碼爲什麼在這裏調用test()功能沒有任何實際參數的正確方法一些投入?重點是什麼?

這裏test被聲明爲函數(void返回類型),該期望的類型的指針int的參數。

我更習慣於像這樣的循環「t ++」。據我所知,++ t在某些情況下與t ++不同。在一個循環書面方式++牛逼只是讓我發瘋

需要注意的是,遞增或本身(t++;++t)遞減在聲明一個變量時,預增和後加有同樣的效果。
當這些表達式出現在大的或複雜的表達式中時(int x = t++int x = ++t對於相同的值t具有不同的結果),可以看出差異。

寫出「t == 4」是不是正常?這又讓我發瘋了!

4 == tt == 4安全得多,雖然兩者具有相同的含義。在t == 4的情況下,如果用戶意外地鍵入t = 4那麼編譯器不會拋出任何錯誤,並且您可能會得到錯誤的結果。而在4 == t情況下,如果用戶不小心輸入4 = t那麼編譯器會通過你喜歡的警告:

lvalue is required as left operand of assignment operator. 
+1

您可能會注意到第一個註釋,那是函數聲明而不是調用。 –

1

請閱讀有關指針,那麼你就會明白,一個指向int已作爲參數傳遞在這裏.. 。

void test(int *int_pointer); 

你可以看到this link很好地解釋++tt++之間的差異。這段代碼沒有什麼區別。結果將是相同的。

if(4 == t)if(t == 4)相同。寫作風格不同。 4 == t主要用於避免輸入=而不是==。如果你編寫4 = t編譯器會報怨,但不會抱怨,如果你寫t = 4

1

//爲什麼在這裏沒有任何真正的參數調用test()函數?重點是什麼? 它不是一個調用,它是函數聲明。在這個位置完全沒有必要,因爲函數是在幾行之前定義的。在現實世界中,這種聲明並不經常使用。

//我更習慣於在這樣的循環中「t ++」。據我所知,++ t在某些情況下與t ++不同。在循環中寫入++ t只會讓我瘋狂 在這種情況下,它們是等價的,但是如果您想到C++,最好完全切換到++ t形式,因爲在某些情況下(例如使用迭代器)它會更好有所不同。

//寫出「t == 4」是否正常?這又讓我發瘋了! 有些人傾向於使用4 == t來避免使用t = 4而不是t == 4(兩者都在C中有效,因爲if條件)時出現問題。由於無論如何,所有正常編譯器都會發出警告t = 4,因此4 == t是不必要的。

1

void test(int *int_pointer);是一個函數原型。在此特定實例中不需要該函數,因爲函數定義在main()以上,但如果test稍後在文件中定義,您將需要它(但不一定在函數體中)。 (有些民間依賴於隱式聲明,但我們不要在此討論)

++t永遠不會比t++慢,因爲在概念上,後者必須存儲並返回以前的值。 (大多數編譯器將優化複製出來,雖然我不喜歡依靠的是:我總是使用++t大量經驗的程序員不。)

4 == t常常代替t == 4使用以防意外省略=之一。這很容易完成,但是一旦您花了一兩天的時間來搜索由單個=代替==造成的錯誤,您將無法再次執行此操作! 4 = t將產生一個編譯錯誤但t = 4實際上是值4的表達這將比較true受讓人4t的值:一個特別危險的副作用。我個人雖然發現4 == t混淆。