-
1 # tigerkin_chn
-
2 # 奔跑的蝸牛rs
在c語言中,所有的的資料都是數值構成的,不同的是編譯器根據不同的資料型別賦予該數值不同的意義;所有的資料都是儲存在資料空間裡的,而儲存的空間地址簡單說就是該資料的指標。
指標被稱為c語言的靈魂,充分肯定了該指標的重要性和地位。作為連線資料和地址的紐帶,指標靈活的遊走於軟體和硬體之間。而在c的高階版本中,指標的數值設定為控制代碼,成為所有資料型別的飄把子。在動態儲存領域,指標更是當仁不讓的成為所有動態記憶體的唯一代表,就像一個企業的法人代表一樣。
指標為什麼有這麼優良的特性和獨特地位,與其靈活性是分不開的。作為直接和硬體地址打交道的軟體特使,指標可以非常方便的找到一切資源,處理一切資源。對於c語言的高階玩家來說,正是指標,褪去了c程式碼的層層內衣,將程式設計的完美胴體展現。
指標操作的眼花繚亂對於初學者來說無疑是夢靨。幸而,初學者不必掌握其獨特技巧,只須會定義和使用,能利用它進行復雜資料結構的偏移和定址,能順利的進行形參實參的轉換即可。而指標真正的奧妙是在程式設計無數行之後,此時的碼農已經閱盡千山,指標也洗盡鉛華,就無困難可言了。
-
3 # 黔景隨心社
通俗的說指標就是記憶體地址的標識。比如說p是一個指標,它可以指向一個記憶體地址。在C語言中用*來定義指標,如int *p;就定義了一個整形的指標p,也用*來引用指標指向的值,如*p=12;就是給p指標指向的記憶體賦值為12。而&是用來取地址的,如scanf(&a,12);p指標本身是存一個地址,佔4個位元組,一般情況我使用的是它存的地址所在的內容。我講得可能有點亂,能力有限,你可以去找一些C語言的書看看
-
4 # 愛學計算機
在C語言中我們可以認為指標就是地址,不過是某一個具體記憶體單元的地址。
如我們在c語言中定義了一個int型變數a:
int a;
那麼計算機就會給a分配4個位元組的地址(在vc++中,在某些版本的c語言中,可能是2個位元組)來存放a的值。由於在記憶體中每個位元組都有一個地址,那麼哪個地址是a的地址呢?我們不能同時用4個地址來表示a的地址吧,所以在c語言中,我們拿這塊空間(4個位元組)的第一個位元組的地址當作變數a的地址,也就是首地址。
然後我們在定義一個指標變數,如:
int *p;
再用取地址運算子把a的首地址取出來賦值給指標變數p,如:
p=&a;
現在指標變數p裡存放的就是a的地址,我們就稱p是a的指標。
回覆列表
指標實際是一個整數數值,這個數字代表作業系統分配的記憶體的一個位置(通常成為“地址”)。
舉個排隊的例子,比如一個門口有很多人依次排隊,我們可以從排隊的第一個人開始,依次給每個人一個唯一的號碼,我們透過號碼,就能快速找到對應的排隊的人。
相似的,當我們透過指標得到記憶體地址後,再透過指標型別(char、int、long等),可以提取從這個記憶體位置開始的指定bit的二進位制資料,這個資料可以被程式執行來使用。
使用指標的好處是“快速”和“靈活”,早期電腦計算能力比較弱,指標操作相對速度要更快,但在今天的電腦執行速度情況下,快速的優勢已經不再明顯。
但從靈活性方面,指標是c語言最有特色的功能之一,無論從字串的處理,函式的呼叫和的返回等都非常靈活,也簡化了程式開發。
不過靈活也帶來了管理的難度,指標操作如果不注意的話,非常容易造成記憶體溢位等錯誤導致程式崩潰(比如,對一個包含5個字元的字串,如果程式試圖從指標地址加5獲取第六個字元),也因為如此,c語言的子孫或後繼們,除了c++和go支援指標,c#採用了非安全程式碼的折中方案外,如java,pyrhon等,大多都不再提供指標的功能,但也限制語言的能力。