1.指標和引用的差別
(1)非空區別:任何情況下都不能使用指向空值的引用。乙個引用總是指向某些物件。如果宣告乙個變數並讓它指向乙個物件,但是該變數某些時候可能也不指向任何物件,這時應該把變數宣告為指標,這樣可以賦空值。引用不允許指向空值。
(2)合法性區別:使用引用之前不需要測試它的合法性,相反,指標應該總是被測試,防止其為空
(3)可修改區別:指標可以被重新賦值以及指向另乙個不同的物件,但是引用則總是指向在初始化時被指定的物件,以後不能改變,但是指定的物件其內容可以改變
(4)應用區別:總的來說,以下情況下應該使用指標,考慮到存在不指向任何物件的可能,需要在不同的時刻指向不同的物件。如果總是指向乙個物件,並且在指向乙個物件後不會改變指向,應該使用引用。
2.
int &reiv;//錯誤,宣告乙個引用,但引用不能為空,必須同時初始化
int &reiv2=iv;//宣告了乙個引用,並同時初始化,也就是reiv2是iv的別名
int *pi;//正確,宣告了乙個指標,但是沒有定義指標所指向的位址
*pi=5;//錯誤,整數指標pi沒有指向實際位址,在這種情況下給它賦值是錯誤的
pi=&iv3;//正確,指標指向iv3的實際位址
const
double di;//錯誤,const常量賦值時,必須同時初始化
const
double maxwage=10.0;//const常量賦值並同時初始化
const
double *pc=&maxwage;//const常量指標賦值並同時初始化
3.傳遞動態記憶體
#include
using namespace std;
viod swap1(int p,int
q)void swap2(int
*p,int
*q) //傳進去位址,形參指向實參的位址
void swap3(int
*p,int
*q)void swap4(int
*p,int
*q)void swap5(int &p,int &q)
int main();
int main()
p只是str的乙個副本,p申請新的記憶體,只是把p所指的記憶體位址改變了,但是str沒有任何影響。每執行一次getmemory就會申請一塊記憶體,但申請的記憶體不能有效的釋放,結果是記憶體一直bei獨佔,最終造成記憶體洩露。
//用指標引數去申請記憶體
void getmemory(char **p,int num)
;int main()
//利用函式的返回值來傳遞動態記憶體
#include
using
namespace
std;
char *getmemory(char *p,int num) //函式返回指標
int main()
5.整型變數傳值
void getmemory2(int
*z);
int main()
把v的位址傳遞給指標z,修改指標z指向位址的值,所以v的值也會發生改變。 指標和引用,const 指標和const 引用
指標和引用是在使用中經常弄混淆的兩個概念。引用 reference 為物件起了另外乙個名字,用符號 表示。name,例如 int i 1024 int ref i 一般在初始化變數時,初始值會被拷貝到新建立的物件中,然而定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引...
指標和引用
一 先看一段 include using namespace std void freeptr1 int p1 void freeptr2 int p2 void main 思考 在 freeptr1 和freeptr2 的比較中,你能發現它們的不同點嗎?二 對 進行解釋 include using...
指標和引用
指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用引用呢?首先,要認識到在任何情況下都不能使用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用乙個變數並讓它指向乙個物件,但...