目錄
* &指針與地址
void指針
指針可以等于:
const
指向常量的指針 const int *px
常指針 int * const px
指向常量的常指針const 類型標識符 * const 指針名
指針加減:
指針恒等式
函數×指針【待續】
指針型函數:
指向函數的指針:指向函數存儲的首地址
引用與指針
內存分配【待續】
輸入出
* &指針與地址
聲明指針:int *px ;
給指針賦值:int x;px=&x; (指針的變量名只能等于地址,*表示取后面地址指向的值)
等價:x=3? 《=》 *px=3(*+地址 也可以改變 地址所指向的值)
void指針
void 類型的指針
? void 類型的指針可以存放任何類型數據的地址,即指向任何類型的對象
? 不允許直接通過 void 指針來訪問其目標對象!
? 若需訪問 void 類型指針的目標對象,必須通過顯式類型轉換指明目標對象的類型
指針可以等于:
? 指針可能的取值
(1) 空指針:0, NULL 或值為 0, NULL 的常量
(2) 類型匹配的對象的地址
(3) 同類型的另一有效指針
(4) 類型匹配的對象的前、后地址(相對位置)
int x[3] = {1,2,3};int * px = &x[0];int * py = &x+1;
int * pz;pz = 0; // OK
pz = NULL; // OK
沒有初始化或賦值的指針是無效的指針;引用無效指針會帶來難以預料的問題!?
const
指向常量的指針 const int *px
const 類型標識符 * 指針名
const對象只能使用const指針
const指針可以指向非const對象
但是修改非const對象的值不能通過const指針進行修改
常指針 int * const px
類型標識符 * const 指針名
px一旦賦值,就不能修改
int * const px=a;就不能再px=b了
指向常量的常指針const 類型標識符 * const 指針名
指針不能改,也不能通過指針改變量值
指針加減:
每次運算? :1=1*每個變量所占空間
指針恒等式
int a【n】;int *pa=a;
則2dim:
指針p
函數×指針【待續】
以地址方式傳遞數據,形參和實參指向共同的內存地址,是同一個數據
形參是指針時,實參可以是指針或地址
可以傳遞函數代碼的首地址,即將函數作為參數
函數間需要傳遞大量數據(數組)時,通常是利用指針傳遞數據的首地址?
指針型函數:
返回值為【全局變量的】指針or【全局變量的】地址
指向函數的指針:指向函數存儲的首地址
int Gcd(int x, int y);
int Lcm(int x, int y);
int (* pf)(int, int); // 聲明函數指針
pf=Gcd; // pf 指向函數
Gcdcout << "最大公約數:" << pf(a,b) << endl;
?可以象使用函數名一樣使用函數指針
引用與指針
? 引用是變量的別名,只針對變量,函數沒有引用
? 引用必須初始化,且不能修改
? 用引用能實現的功能,用指針都能實現
? 傳遞大量數據時(數組),建議使用指針
int a = 3;
int * pa = &a; // 指針
int & ra = a; // 引用(取別名)
內存分配【待續】
new
delete,new完了一定要delete
引用和指針有何區別?
給指針賦值=地址,引用賦值=自身
改變變量:*pa=5《=》&pa=5?
初始化是不同的:
引用是一個變量的別名,它必須在定義時初始化,并且一旦初始化之后就不能再指向其他變量。
指針是一個變量,用來存儲另一個變量的地址。指針可以在任何時候被重新賦值,以指向不同的變量
-----------------------------以上為第六講。
輸入出
文件輸入出等——————————以上為第七講。