![](/img/trans.png)
[英]Using 'scanf', what is the difference between having a variable or pointer in the second argument?
[英]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.