指標和引用

2021-07-13 08:08:35 字數 1628 閱讀 6073

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...

指標和引用

指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用引用呢?首先,要認識到在任何情況下都不能使用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用乙個變數並讓它指向乙個物件,但...