引用 &
注意的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表達式創建的內置類型數組元素。 |