C 複習 指標和引用的要理解的問題

2021-10-08 20:58:25 字數 2554 閱讀 4142

非空區別:在任何情況下都不應該使用指向空值的引用,乙個引用必須總是指向某些物件。如果使用乙個變數並使它指向乙個物件,但是該變數在某些時候也可能不指向任何一對向,這時應該把變數宣告為指標,因為這樣可以賦空值給該變數。

合法性區別:在使用引用之前不需要測試它的合法性,指標則應該總是被測試,防止其為空。

#include

using

namespace std;

intmain()

char

*c =

"hello world "

;//分配乙個指標變數

*c =

't';

// false

char c=

"hello world "

;// 分配乙個區域性陣列c[0

]='t';

// ok

#include

using

namespace std;

intmain

(void

)

幾個容易混淆表示式:

1.

float(*

*def)[10

];// def是乙個二級指標,它指向的是乙個一維陣列的指標,陣列的元素都是float

2.double*(

*g)[10]

;//g是乙個指標,指向乙個一維陣列,陣列的元素都是double *

3.double

(*f[10]

)();

//f是乙個陣列,f有10個元素,元素都是函式的指標,指向的函式型別是沒有引數且返回double的函式。

4.int*(

(*b)[10

]);// 同 int *(*b)[10],是指向一維陣列的指標

5.long

(* fun)

(int);

// 函式指標

6.int(*

(* f)

(int

,int))

(int);

// f是乙個函式的指標,指向的函式的型別是兩個int引數並且返回乙個函式指標的函式,返回的函式指標指向有乙個int引數並且返回int的函式

指標陣列和陣列指標宣告如下:

int

(* ptr)

;// 指向整型陣列的指標

int*ptr;

// 指標陣列,ptr 裡存放的是位址

例項程式1:

#include

#include

using

namespace std;

intmain()

,};int

(*a)[10

]= v;

//陣列指標

cout<<

**a

(a+1

)

cout<<*(

*a+1

)

cout<<

*(a[0]

+1)

*(a[1]

+1)

}

執行結果:

[fancy@localhost pointer]$ ./array 111

2212

例項程式2:

#include

intmain()

;// a是1行5列的陣列

int*ptr =

(int*)

(&a+1)

;// 指向a陣列的第6個元素(儘管不存在)

printf

("%d %d\n",*

(a+1),

*(ptr -1)

);//(ptr -1)指向a陣列第5個元素

return0;

}

陣列名本身a就是指標,再加上&,&a就變成雙指標(二維陣列),加1,就是陣列整體加一行,ptr指向a第6個元素。

執行結果:

[fancy@localhost pointer]$ ./test 

2 5

迷途指標也叫懸浮指標、失控指標,當對乙個指標進行delete操作後,這樣會釋放它所指向的記憶體,並沒有把它設定為空指標時產生的。

例項程式:

#include

typedef

unsigned

short

int ushort;

intmain()

note:刪除乙個指標後要小心不要再使用它(雖然這個指標仍然指向原來的記憶體區域,但是編譯器已經把這塊記憶體區與分配給了其他資料,再次使用會導致程式的崩潰)。為安全起見,在刪除乙個指標之後,把它設定為空指標(0),這樣可以消除它的危害。

C 指標的引用理解

指標可以作為引數傳遞直接修改所指的變數的值,如下 void change int p int main 指標傳遞實際上也是值傳遞,傳遞的值便是指標的位址,執行 p 20後,雖然傳遞的是乙個位址的副本,但是副本的值就是變數的位址,執行後,所指向的位址的值變成了20,達到了修改變數值的目的。所以,當需要...

深入理解c 指標的指標和指標的引用

展示一下使用指標的指標和指標的引用修改傳遞給方法的指標,以便更好的使用它。這裡說的指標的指標不是乙個二維陣列 為什麼需要使用它們 當我們把乙個指標做為引數傳乙個方法時,其實是把指標的複本傳遞給了方法,也可以說傳遞指標是指標的值傳遞。如果我們在方法內部修改指標會出現問題,在方法裡做修改只是修改的指標的...

關於指標和引用的理解

1.指標的定義int a,a為指標變數,將int 看作整體 型別 另外 符號也可看作取值符,即對a指標取其指向位址的值。eg int a 10 int b a false int b a true 將第三句可拆為 int b b a 同上面將int 看作整體結合,即定義了b指標,不能直接將a物件賦給...