引用和指針小結

引用 &

 

注意的2點:

1使用引用時,必須同時對它進行初始話,指向一個已經存在的對象

2 一旦一個引用被初始化,就不能改爲指向其他的對象。(而指針可以改變指向)。

 

聲明使用如下:

int   i ;

int   &j=i ;

這樣就可以i , j 就可以互相等價了。

 

 

指針 *

 

聲明使用如下:

int a,b;

int *pa,*pb=&b;  (pa,pb就是地址值)

pa=&a;

 

注意指針聲明時和使用時,*代表不同的意義。

指針聲明之後也要指向一特定值(初始化)才能使用。指針可以改變指向。

空指針:

int *p;

p=0;//不指向任何地址  (安全的方法)

-----------------------------------

轉 常量指針和指針常量

const要注意的問題
  1、下面是一個幾乎所有人剛開始都會搞錯的問題:
已知:typedef char *cstring;
在以下聲明中,cstr的類型是什麼?
extern const cstring cstr;

錯誤答案:const char *cstr;
正確答案:char *const cstr;

  錯誤在於將typedef當作宏擴展。const 修飾cstr的類型。cstr是一個指針,因此,這個定義聲明瞭cstr是一個指向字符的const指針。
  2、指針是const還是data爲const?
辨別方法很簡單,如下:

代碼:
char *p="hello"; //non-const pointer, non-const data;
const char *p="hello"; // non-const pointer, const data;
char * const p="hello"; // const pointer , non-const data;
const char * const p="hello"; // const pointer, const data;


  要注意的是,"hello"的類型是const char * ,按C++standard規則,char *p="hello" 是非法的(右式的const char* 不能轉換爲左式的char *),違反了常量性。但是這種行爲在C中實在太頻繁,因此C++standard對於這種初始化動作給予豁免。儘管如此,還是儘量避免這種用法。
  3、const初始化的一些問題
const 對象必須被初始化:

代碼:
const int *pi=new int; // 錯誤,沒有初始化
const int *pi=new int(100); //正確
const int *pci=new const int[100]; //編譯錯誤,無法初始化用new表達式創建的內置類型數組元素。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章