指针和引用
指针初始化
对指针进行初始化时经常使用的有下面几种方式:
1.采用NULL或空指针常量,如:int *p = NULL;或 char *p = 2-2; 或float *p = 0;
2.取一个对象的地址然后赋给一个指针,如:int i = 3; int *ip = &i;
3.将一个指针常量赋给一个指针,如:long *p = (long *)0xfffffff0;
4.将一个T类型数组的名字赋给一个同样类型的指针,如:char ary[100]; char *cp = ary;
5.将一个指针的地址赋给一个指针,如:int i = 3; int *ip = &i;int **pp = &ip;
6.将一个字符串常量赋给一个字符指针,如:char *cp = “abcdefg”;
7.将一个T类型结构体变量赋给一个同类型结构体指针,如:Node<T> *s; s = new Node<T>;("Node"为结构体名);
指针的运算
指针可以做 +,- 运算,不能做 *,/运算;
指针类型变量的++或--, 其增加或减少的数量是去掉一个 * 后变量的宽度;
指针是无符号类型;
用指针常量给指针变量赋值时,要有强制类型转换,如:int *p = (int*)1101,否则编译器不知道该常量是哪种类型常量;
* 运算后变量类型减“*”,& 运算后变量类型加“*”;
基本类型作为参数传的是内存里的值,数组作为参数传的是数组首地址;
指针和数组的关系
*(p+i) = p[i];
*(*(p+i)+k) = p[i][k];
*(*(*(p+i)+k)+m) = p[i][k][m];
*() 和 [] 可以相互转换
int arr[] = {......};
int *p = arr;
arr,p,&arr[0]等价,但“arr本身就是一个指针”这种说法不正确。
C标准规定:当数组作为数组定义的标识符(也就是定义或声明),在 sizeof 或 & 的操作时,它才表示整个数组本身,其他情况下,数组会被转换为指向第0个元素的指针(地址)。
引用
引用是一种数据类型

1.引用必须赋初始值,且只能指向一个变量,“从一而终”;
2.对引用赋值,是对其指向的变量赋值,而不是修改引用本身的值;
3.对引用做运算,是对其指向的变量做运算,而不是对引用本身做运算;
4.引用类型就是一个弱化了的指针;
C++多态:子类指针能指向父类(父类不能指向子类)。

浙公网安备 33010602011771号