在記憶體中一般是通過變數名來對記憶體單元進行訪問操作。但其實,程式編譯後已經將變數名轉換為變數的位址,對變數名的訪問都是通過位址進行的。
i_pointer=&i;
&是取位址運算子,&i 是 i 的位址。位址指向該變數單元(通過位址就能找到該變數單元)。
因此,形象地稱:位址為指標(通過它能訪問以他為位址的記憶體單元)。乙個變數的位址稱為該變數的指標。對應,乙個變數的指標就是變數的位址
乙個專門用來存放位址(即指標)的變數,指標變數。
& 取位址運算子;
* 指標運算子(間接訪問運算子)
&a 為變數a的位址,*p 指標變數p所指向的儲存單元。
例子1:
#include using namespace std;
int main()
for(int i=0;i<10;i++)
for(int i=0;i<10;i++)
return 0;
}
例子3:
指標變數法表示陣列。
#include using namespace std;
int main()
for(int i=0;i<10;i++)
return 0;
}
注:1. 例子1、2 對每個a[ i ](或「*(a+i)」)都要計算位址,然後再訪問元素。而例子3 是用指標變數直接指向元素,不必每次都重新計算位址。例子3 的效率和執行速度都是三個中最高的(但沒有下標法直接)。
2. 注意陣列越界問題!
陣列名代表陣列首元素位址。用陣列名做函式引數傳遞的是陣列首元素所對應的位址。因此,用指標變數作函式形參,同樣可以接受從實參傳來的陣列首元素位址(此時,實參是陣列名)。
例子4:
將10個整數按由小到大的順序排列。
#include using namespace std;
int main()
pai(a,10);
for(p=a;p<(a+10);p++)
return 0;
}void pai(int *p,int n)
} }}
注:1. c++編譯系統將形參陣列名一律按照指標變數來處理。
2. 實際上在函式呼叫時並不存在乙個占用儲存空間的形引數組!
3.實參陣列名(如 a )代表乙個固定的位址,或者是說是指標形常量,因此要改變 a 的值是不可能的!
4. 而形參陣列名是乙個指標變數,並非乙個固定的位址。因而它可以可以改變的。比如在函式開始時,就接受了實參陣列首元素位址,在函式執行過程中,它也可以被賦值。
在c++中有三種方法可以訪問乙個字串。
例子1:
用字元陣列來存放乙個字串。
#include using namespace std;
int main()
else
}
注:語句 int (*p)(int a,int b); 中,依次的意義為,第乙個int:指標變數所指向的函式的型別;(*p):p 是指向函式的指標變數;(int,int):p所指向的函式中的形參的函式型別。
在定義指向函式的指標p時,(*p)兩側的括號不能省略,表示 p 先與 * 結合,在與右面的括號結合。如果省略的話,該語句的含義就變成了:定義乙個返回值是指向 int 型的指標的函式!
簡稱為指標函式。在定義時,注意和定義指向函式的指標作區分。
int *p(int x,int y,int z);
例子1:
將若干字串按字母序排序輸出。
#include #include using namespace std;
int main()
; int n=5;
sort(name,n);
for(int i=0;i0)
}}}
指向指標(資料)的指標。就比如剛才的指標資料name,陣列名name就是指標陣列首元素的位址。所以name以及(name+ i )
例子2:
指向字元型資料的指標變數。
#include using namespace std;
int main()
;//定義指標陣列
p=a+2;
cout<<*p
return 0;
}
資料結構線性表c
time limit 1000ms memory limit 65536k 輸入n個無序的整數,建立乙個有序鍊錶,鍊錶中的結點按照數值非降序排列,輸出該有序鍊錶。第一行輸入整數個數n 第二行輸入n個無序的整數。依次輸出有序鍊錶的結點值。6 33 6 22 9 44 5 5 6 9 22 33 44 ...
基礎資料結構 線性表實現
以下 是對基礎資料結構中的線性表的順序實現,在vs2012下沒問題 include define maxlength 20 struct list 增加元素 int insert list l,int e,int index l.data index e l.length return 1 刪除元素...
基礎資料結構 線性表 順序表
線性表是n個資料元素的有限序列,資料之間存在順序關係,一般同乙個線性表屬於同一類資料物件 例如a z的字母表 線性表存在唯一乙個首位元素和末位元素,除了第乙個元素和最後乙個元素,每個元素存在著乙個前驅和乙個後繼 a的後繼是b,b的前驅是a 線性表主要有順序表和煉表兩種儲存形式,線性表是一種邏輯結構,...