引用 &
注意的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表达式创建的内置类型数组元素。 |