C語言基礎複習筆記(一)指標
最近linux很火,年前對linux再詳細瞭解了個大概,結合在windows平臺活躍與強大無比的C++,最終得出一個結論:C語言依然強大。
過年回來,便對的C語言充滿了興趣,於是乎去網上下載了教程回來,細細研讀,基礎程式設計思想始終是很重要的。
首先,入手的便是C語言的核心精華部分,指標。要理解指標就要一步步理解下面的點:
1. 我們所使用的記憶體單元在物理上線性的,所以記憶體地址也是一系列連續的,每個記憶體單元都有一個固定的,不會被修改的地址。
2.
3. 一個地址唯一指向一個記憶體變數,這個地址就是指標,然後用來存放這個地址的變數就是指標變量了。指標變數其實也就是一個變數,用了儲存地址作用的。
設一組指標變數p a、p b、p x、p y、p m、p c h 1、p c h 2,分別指向上述的變數 a、b、x、y、m、c h 1、c h 2,指標變數也同樣被存放在記憶體,二者的關係如圖 6 - 2所示:
4. 關於運算子:
&運算子:取地址運算子,&m即是變數m的地址。
*運算子:指標運算子,*pa即是表示其所指向的變數。
Int *pa;
Float *pb;
Char *px;
定義了3個指標變數,pa指向了一個整型變數,pb指向了一個實型變數,px指向了一個字元型變數。也就是說,pa、pb、px分別存放了整型變數、實型變數、字元型變數的地址。
Int m=3 ;
Float f=4.5 ;
Ch=’a’ ;
我們進行操作:
Pa=&m;
Pb=&f;
Px=&ch;
上述操作表示,將變數m的地址賦給指標變數pa;將變數f的地址賦給指標變數pb;將變數ch的地址賦給指標變數px
*指標變數,其含義是指標變數所指向的值。
若p=&a; 則稱p指向變數a,或者說p具有了變數a的地址。
在以後的程式處理中,凡是可以寫& a的地方,就可以替換成指標的表示p,a就可以替換成為* p。
指標與陣列
1. 定義一維陣列,在記憶體也有系統分配的儲存空間,陣列名就是陣列在記憶體的首地址(a[10]的a)。
2. 陣列名陣列的首地址,也就是陣列的指標。
3. 定義一個指標變數,並將陣列的首址傳給指標變數,則該指標就指向了這個一維陣列。
int a[10] ;
int *ptr ; /* 定義陣列與指標變數*/
做賦值操作:ptr=a; 或 p t r = & a [ 0 ] ;
a是陣列的首地址,&a[0]是陣列元素a[0]的記憶體地址,a[0]地址就是陣列的首地址
1) ptr+n與a + n表示陣列元素a [ n ]的地址,即&a[n] 。
2) * ( p t r + n )和* ( a + n)就表示為陣列的各元素即等效於a [ n ]。
4. 指向陣列的指標變數也可用陣列的下標形式表示為 p t r [ n ],其效果相當於* ( p t r + n )。
5. *ptr++所表示的意義。
*ptr表示指標所指向的變數;ptr ++表示指標所指向的變數地址加1個變數所佔位元組數。
指向整型變數,則指標值加 2,若指向實型,則加4,依此類推。
指標與二維陣列
定義一個二維陣列:int a[3][4];
其中a是二維陣列的首地址, & a [ 0 ] [ 0 ]既可以看作陣列0行0列的首地址,同樣還可以看作是二維陣列的首地址,a [ 0 ]是第0行的首地址,當然也是陣列的首地址。
我們就可以把二維陣列看成是由 n行一維陣列構成,將每行的首地址傳遞給指標變數,行中的其餘元素均可以由指標來表示。
對指標法而言,程式可以把二維陣列看作展開的一維陣列:
s