#include <stdio.h>
int main(void) {
int x = 5;
int y = 10;
int* px = &x;
int* py = &y;
printf("the adress of %d is %p.
",x,px)。
printf("the adress of %d is %p.
",y,py)。
*px = 8;//change the value at the adress of px。
*py = 18;
//what happens if instead of *px = 8, just x = 8?
x = 99。
printf("the adress of %d is %p.
",x,px)。
printf("the adress of %d is %p.
",y,py)。
//so It did change, what's the point of using *px when changing the value?
return 0。
}
你好,我開始在學校學習C語言,我遇到了一個困難,它可能非常簡單,但在這一點上我并不了解。 我試圖改變x的值,我先用*px = 8的方法來改變它。 但緊接著我用了x=99,它也改變了,所以我不知道它們之間有什么區別。
uj5u.com熱心網友回復:
問:我先用*px = 8的方法來改變它
。
A:"x "和 "*px "的值都變成了 "8",正確嗎?
問:但是緊接著我用x = 99,它也改變了
A:很好。 所以現在 "x "和"*px "都是99。 這就是你所期望的,對嗎?
問:所以我不知道它們之間的區別是什么?
在這個例子中,它們都是等同的。 它們都完成了完全相同的事情。
為什么要使用指標?
為什么要使用指標呢?因為變數 "x "被綁在一個特定的記憶體位置:你不能改變它。
另一方面,如果你需要的話,指標 "px "可以在運行時被改變為指向不同的記憶體位置。
為什么這很有用? 有許多不同的原因。 例如:
當你malloc()動態記憶體時,系統會給你一個指標。 你不知道也不關心它在記憶體中的位置:你只是使用它。
經常需要指標來遍歷鏈接串列中的元素
遞增( )和遞減(--)指標的能力簡化了許多演算法
等等。
你可能會發現這些文章很有幫助:
uj5u.com熱心網友回復:
其他答案解釋了正在發生的事情,但是在你的問題中,我還讀到你問 "為什么 "有人想使用參考而不是直接訪問記憶體地址。
在計算機科學中,任何事情都有很多原因,但有幾個我認為大多數人都不會爭論的原因,對初學者的理論理解是有幫助的:
計算機科學的很多內容都是這樣的。
計算機科學作為一門學科,很多都是對資源的有效/優化管理,在很多情況下,計算機記憶體,但I/O和CPU構成了我們管理的其他兩種資源,以使 "好 "的軟體。你可能還記得,一臺簡單的計算機可以被認為是由 "總線 "連接的CPU、RAM和存盤器。
直到最近,大多數軟體都不是在擁有大量記憶體的機器上運行。出于性能的考慮,有必要對記憶體進行管理,盡管我們今天可以使用更高的記憶體機器,但仍必須對記憶體進行管理!
我們在更多的機器上管理記憶體。
在最近創建的語言中,我們通過抽象化來管理這個問題--或者說在這種情況下,當我們高度確定地知道人們想要做什么的時候,我們為他們做事情。我們把大部分資源管理被抽象化和簡化的語言稱為 "高級 "語言。相對于機器代碼而言,你是在用你的代碼與機器 "對話"(你可以把它看成是二進制的1和0)。
TLDR;記憶體是有限的,而指標所占的空間通常比它們所指向的資料要小,這使得地址空間的利用效率得以提高。它還允許許多其他整潔的東西,如虛擬化的地址空間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/315428.html
標籤:
上一篇:如何使用關聯串列輸出字符?
下一篇:一個變數可能持有的數值
