C語言指標總結
指標一直是學習C/C++語言的一個重點與難點。只有熟練地掌握了指標,才可以說掌握了C語言,C語言的最吸引人的地方也是指標,因為它可以任意地操作記憶體,編寫程式中有著極大地自由空間,因此,也有人說指標是C語言的靈魂。而且指標也是各大公司面試程式設計師的必考內容。現我將自己所學的關於指標的知識進行了總結,希望與大家一起學習。
1.指標事實上是一種資料型別,和int 基本型別一樣。指標也是一種變數,佔有記憶體空間,儲存的是記憶體地址。
2.關於*p操作
(1)在宣告指標中,“*”號表示所宣告的變數是一個指標。
(2) 在指標使用時,“*”號表示操作指標所指向的記憶體空間中的值。
(3)當*p放在等號的左邊時,相當於給記憶體賦值。
(4)當*p放在等號的右邊時,相當於從記憶體中獲取值。
<span style="font-size:18px;">int *p = NULL;//宣告p是一個指標變數
int i = 3,j = 0;
p = &i;//p指向i所在記憶體
*p = 5;////將p所指的記憶體的值改變為5,此時變數i的值也是5
j = *p;//將*p把指的記憶體空間的值(i的值)賦值給j</span>
注:指標變數和它所指向的記憶體塊是兩個不同的概念。
3.指標的資料型別是指它所指向的記憶體空間的資料型別。當指標步長自加的時候,是根據所指向的記憶體的資料型別來確定的。
若在32位的系統上,一個指向整型資料的指標,自加的話,是加4.
int *p = &I;
p ++;//<==>(unsigned int)p+sizeof(int);
4.通過指標來改變變數的值是指標的一個重要應用。這是指標作為函式引數的精華。函式呼叫時,用n指標(形參)改變n-1指標(實參)的值。如:1級指標形參改變0級指標實參的例子。
Swap(int*a,int *b)
{
Int p = *a;
*a = *b;
*b = p;
}//這樣可以將實參的值也改變。
5.陣列作函式引數的時候會退化為一個指標
void fun(int a[10])<<==>>void fun(int *a)//無論實參是包含多少個元素的陣列,但作為函式引數只是把函式首地址傳遞給形參。
6.關於解決野指標的方案
(1)定義指標時,把指標變數賦值為null;
(2)釋放記憶體時,先判斷指標變數是否為null;
(3)釋放記憶體完畢後,把指標變數重新賦值為null
當然指標不僅僅只是這麼簡單,這只是指標的基礎,但是其他指標的使用全部是建立在這基礎之上,因此,熟練掌握指標的基礎是十分必要的,並且加以利用,這樣就可以解決在工作學習中遇到更加複雜指標的情況了。如有不當之處,請大家指出,相互學習,共同進步。