比如有天你說你要學習C++,要借我的這本 C++ Primer Plus,我把書給你送過去發現你已經跑出去打籃球了,于是我把書放在了你桌子上書架的第三層四號的位置。并寫了一張紙條:你要的書在第 三 層 四號的書架上。貼在你門上。當你回來時,看到這張紙條,你就知道了我借與你的書放在哪了。你想想看,這張紙條的作用,紙條本身不是書,它上面也沒有放著書。那么你又如何知道書的位置呢?因為紙條上寫著書的位置嘛!聰明!??!其實這張紙條就是一個指針了。它上面的內容不是書本身,而是書的地址,你通過紙條這個指針找到了我借給你的這本書。
最簡單的指針使用
#include <iostream> #include <stdlib.h> using namespace std; int main() { int i = 30; std::cout << "&i = "<< &i << std::endl; std::cout << "i = " << i << std::endl; int *pi = NULL; //初始為空 表明該指針不指向一個可訪問的內存位置 pi = &i;//把 i 地址的編號賦值給 pi 。指針變量所存的內容就是內存的地址編號 std::cout << "*pi = " << *pi << std::endl; return 0; }
結果如下
&i = 0x7ffeb3485828
i = 30
*pi = 30
指針算法運算
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // 指針中第一個元素的地址 ptr = var; // 不需要加取地址符 for (int i = 0; i < MAX; i++) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // 移動到下一個位置 ptr++; } return 0; }
Address of var[0] = 0xbfce42d0
Value of var[0] = 10
Address of var[1] = 0xbfce42d4
Value of var[1] = 100
Address of var[2] = 0xbfce42d8
Value of var[2] = 200
傳遞指針給函數 總體上可以理解成全局變量 因為傳的是地址, 修改之后在另一個函數內也變化
#include <iostream> #include <ctime> using namespace std; void get(unsigned long *par); int main () { unsigned long sec = 10; get( &sec ); cout << "sec: " << sec << endl; return 0; } void get(unsigned long *par) { *par = *par * *par; return; }
sec: 100
#include <iostream> #include <ctime> #include <cstdlib> using namespace std; // 要生成和返回隨機數的函數 int * getRandom( ) //返回指針 { static int r[10]; // 設置種子 srand( (unsigned)time( NULL ) ); for (int i = 0; i < 10; ++i) { r[i] = i; cout << r[i] << endl; } return r; } // 要調用上面定義函數的主函數 int main () { // 一個指向整數的指針 int *p; p = getRandom(); for ( int i = 0; i < 10; i++ ) { cout << "*(p + " << i << ") : "; cout << *(p + i) << endl; } return 0; }
浙公網安備 33010602011771號