非空區別:在任何情況下都不應該使用指向空值的引用,乙個引用必須總是指向某些物件。如果使用乙個變數並使它指向乙個物件,但是該變數在某些時候也可能不指向任何一對向,這時應該把變數宣告為指標,因為這樣可以賦空值給該變數。
合法性區別:在使用引用之前不需要測試它的合法性,指標則應該總是被測試,防止其為空。
#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
)/ a指標向後移動1*sizeof(陣列大小),a + 1向後移動80個位元組
cout<<*(
*a+1
)/ 針對該行向後移動8個位元組
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物件賦給...