指针和引用

指针初始化

对指针进行初始化时经常使用的有下面几种方式:

  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++多态:子类指针能指向父类(父类不能指向子类)。

 

posted @ 2019-10-09 16:11  tianqibucuo  阅读(165)  评论(0)    收藏  举报