簡體   English   中英

在原始變量名稱之前使用指針變量或使用與號有什么區別?

[英]What is the difference between using a pointer variable or using an ampersand before the original variable name?

兩個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;
}

與編程中的所有內容一樣,所有內容都取決於您要使用的信息內容。

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

那么,為什么我們要利用指針變量來包含該信息呢? 例如,考慮遍歷數組的指針算法或某種類似的技術。 如果不首先通過將其分配給指針變量來復制內存位置(在您的示例中, int *p2 = &v2 ),則將通過遞增或遞減v2變量來破壞它; 它不會再指向相同的位置了!

使用指針變量的另一個原因是可讀性。 當其他人正在閱讀您的代碼時,如果在對它們執行操作之前將內存位置分配給指針變量,您正在做的事情就變得更加明顯。

如果您對此仍然感到困惑,請隨時對此答案發表評論或向我發送消息,我很樂意與您討論。 指針作為一個概念確實很棘手!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM