2014-06-27 36 views
0

兩個main()函數都做同樣的事情,但我被告知使用指針變量很重要。有人可以解釋爲什麼我不能總是隻用&variableName一直髮送位置?使用指針變量或在原始變量名稱之前使用&符號有什麼區別?

int swap_int(int *i1, int *i2) 
{ 
    int t = *i1; 
    *i1 = *i2; 
    *i2 = t; 
} 

int main(void) 
{ 
    int v1 = 0; 
    int v2 = 37; 
    int *p2 = &v2; 
    printf("v1 = %d, v2 = %d\n", v1, v2); 
    swap_int(&v1, p2); 
    printf("v1 = %d, v2 = %d\n", v1, v2); 
    return 0; 
} 

或者,如果你這樣做:

int main(void) 
{ 
    int v1 = 0; 
    int v2 = 37; 

    printf("v1 = %d, v2 = %d\n", v1, v2); 
    swap_int(&v1, &v2); 
    printf("v1 = %d, v2 = %d\n", v1, v2); 

    return 0; 
} 
+0

'int x = 4;' - 這與之後使用'x'或'4'之間的區別是相同的。 –

回答

2

與編程的一切,一切都取決於它是什麼,你想用的信息做。

指針只是存儲內存位置的數據類型。和號運算符(&v1)獲取存儲特定變量數據的內存地址。由於v1存儲整數變量,因此& v1返回存儲該整數的存儲器中的位置。

那麼,我們爲什麼要使用指針變量來包含這些信息呢?例如,考慮指針運算來遍歷一個數組或類似的技術。如果我們不先將內存位置拷貝到一個指針變量中(在你的例子中,int *p2 = &v2),我們會通過遞增或遞減來損壞v2變量;它不會指向同一個位置了!

使用指針變量的另一個原因是可讀性。當其他人正在閱讀你的代碼時,如果你在對它們執行操作之前將內存位置分配給一個指針變量,那麼你將會更清楚地知道你在做什麼。

如果您仍然對此感到困惑,請隨時評論此答案或給我發送消息,我很樂意與您談談此事。指針作爲一個概念非常棘手!

相關問題