隨著程式語言的越來越多,但c語言在程式語言中的地位似乎始終沒有改變,其中得益於c語言中的指標,可以直接去操作記憶體位址與暫存器,執行效率也高,在嵌入式領域運用得尤其廣泛。對於初學者來說指標是c語言中很難翻越的一座大山,指標的掌握程度直接關係到c語言的掌握程度,其實指標並不是那麼高不可攀,只是紙老虎而已,只要正確的理解指標的概念,多程式設計多除錯,也就很容易掌握。
計算機的所有資料都儲存在記憶體中,不同的資料型別所佔的位元組數又不同,比如int型佔4個、char型佔1個,為了正確的訪問這些資料必須為每個記憶體編寫相應的編號,而這編號就是我們所說的指標,指標就是位址,只有找到相應的記憶體位址就能取出相應的資料,就如同我們生活中的身份證號、門牌號,只有找到相應身份證號、門牌號才能找到相應的人與房間。
一級指標的理解:
用於存放變數的位址。
int main(void)
int a = 5; //給int型變數賦值,相當於在記憶體中開闢一塊4個位元組的空間存放整數5
int *p = null; //定義乙個整形指標變數, (俗話說指標很可怕,定義的時候必須初始化,這裡我們給null)
p = &a; //給指標p賦值,即把變數a的位址給指標p(指標就相當與位址)
printf("&a = %p,p = %p,*p = %d\n",&a,p, *p); //列印結果
return 0; //函式的返回值
}列印結果:&a = 0x28ff40, p = 0x28ff40, *p = 5; //*p 取記憶體位址的值。
二級指標的理解:
用於存放一級指標變數的位址
int main(void)
列印結果 **q = 5, *p = 5, a = 5;
結論:二級指標指向一級指標,一級指標指向變數
這樣只需通過就能通過指標去改變記憶體中的存放的資料;
函式指標:
一級指標指向普通變數,存放普通變數的位址。二級指標指向一級指標,存放普通變數的位址的位址。
這時候就會有人想假如我記憶體中存放的乙個函式位址那該怎麼辦,
這時就需要函式指標;
#include//包含標頭檔案
int max(int a, int b) //子函式
int main(void) //主函式
列印結果:maxval = 6;
理清常用概念:
函式指標:指向函式的指標; 例 :int (*p)(int a, int b);
指標函式:函式的返回值是指標; 例:int *p(int a, int b);
陣列指標:指向陣列的指標; 例:int(*p)[size],也相當於乙個二維陣列的指標;
指標陣列:陣列裡面存放的是指標; 例: int *p[size], 的 執行級別高於*;
我們可以用指標指向變數,函式,陣列,從而可以輕易的改變記憶體的值,靈活的使用指標往往可以做到事半功倍的效果。
C 語言中的指標
指標是 c 語言中的精華,正確靈活的運用指標,可以表示複雜的資料結構,動態分配記憶體,方便使用字串和陣列,呼叫函式返回多結果,直接處理記憶體單元等等。位址就是記憶體的編號,如果拿旅店作為記憶體,那麼每個房間號其實就相當於位址了。當程式編譯時,就會對變數分配記憶體單元,分配時按變數型別分配大小。經過編...
C語言中的指標
指標是c語言中非常重要的東西,書本上寫了好多來解釋裡面的原理,當年老師也跟我們講了好多這方面的東西,一直就是感覺沒有聽明白。直到我看到了指向指標的指標,我建立了自己的理解,不知道是否正確,但是基本能解決遇到的問題。int p p i p。type p,宣告指標變數,type 例如int 告訴計算機p...
C語言中的 指標
讓你不再害怕指標 要了解指標,或多或少會有一些複雜的型別,讓人思緒萬千。其實要理解複雜型別其實很簡單,乙個型別裡會出現很多運算子,但他們和普通的表示式一樣,也有優先順序。所以 從變數名處起,與運算子優先順序結合,一步一步分析。先從簡單的型別開始分析 int p 這是乙個普通的整型變數 int p 從...