C++指针总结

来源:互联网 发布:银河铁道之夜 知乎 编辑:程序博客网 时间:2024/06/07 01:06
指针定义和基本操作:指针是内存的一个地址。定义格式,类型名 *指针变量名 ,其中指针变量名指的是内存地址,加*是表示指向这一内存地址所存储的内容,如果要取地址的话就要用&来处理,比如& 指针变量名 或 &* 指针变量名,如果指针暂时不用的时候,可以赋给一个空指针 NULL。
 统配指针类型void:void *指针变量名 
 指针与常量限定符const:                            指向常量的指针:const int *p = &x 或 p = &x; 常指针:指针本身是个常量,它固定指向某一个变量 int *const p = &x,此时 *p = 20是正确的赋值,而p = &y则是不正确的赋值。
 指向常量的常指针:指针本身不能改变,指向的地址中的值也不能改变。指向常量的常指针定义如下:const int *const p = &x;const 加在哪一部分前就是限定哪一部份不能变。
 指针运算与数组:
 指针指向数组: p = & array[i]                          
 初始化指针: p = &array[0] 或 p = array
 用指针访问数组: *p  *(p + i) p[i] 都可以访问数组的元素
 指针与动态内存分配:实现动态内存满足三个条件:定义指针变量 int *p,动态申请空间 new int ,动态回收空间 delete p
 动态变量的创建:new 类型名  如 int *p   p = new int   
 new 操作创建一个以为数组:int *p ; p = int[10];
 动态变量的回收:回收动态变量:delete 指针变量; 回收动态数组: delete [] 指针变量。
 内存泄漏:申请动态变量用完后,没有进行delete操作,这样可能会耗尽内存,直至崩溃!
 查找new操作的失误:new操作之前可能计算机内存已经消耗完了,所以有必要在申请前检查一下,如果p == NULL,就直接 delete p;也可以用assert()宏来检查,检查的命令是 assert(p != 0) 
将字符数组赋给一个指针,字符数组数组中存储的是一个字符串,字符串存储在栈工作区。
申请一个动态的字符数组赋给一个指向字符是指针,字符串存储在字符数组中,字符串存储在堆工作区。
把函数的形参定义为指针,在函数调用时,将实参的地址传过去,从而实现交换两个形参指向的空间的内容。
数组名作为形参和实参时,形参与实参实际上共享同一块存储空间。数组传递的本质是地址传递。
字符串作为函数的参数时,字符串本质上是用一个字符数组来存储,形参和实参都可以写成字符数组或指向字符的指针。传递字符串只需一个参数,即指向字符串中的第一个指针,字符串有特定的结束标志'\0'
返回指针的函数:返回值应该是全局变量或动态变量,返回动态变量时需要要用delete运算来释放内存。
引用与引用的传递:1.引用的定义:引用就是给变量取了一个别名,引用定义时变量前必须加&,定义时必须立即初始化,不能在定义完成后初始化,一旦为一个变量定义了别名,就不能使其作为另外一个变量的别名。2.引用类型作为函数的参数:函数调用时,对于的函数参数必须是左值表达式(通常为变量)。3.返回引用的函数:函数返回值为引用类型时表示函数返回值是函数内某一个变量的引用,返回时不需要创建临时变量来存放,可以直接返回return后的变量本身,如果不希望返回值被修改,就把返回值声明为const,在定义返回值引用值的函数时,不能返回该函数的局部变量,返回值也不能是一个表达式,函数返回引用值一般是全局变量或动态变量.
指针数组与多级指针:一维数组定义形式:char *string[10];         
main函数的参数:第一个形参argc,是一个整型的参数,它的值是运行程序时命令行的参数个数;第二个形参argv,是一个指向字符的指针数组,它的每一个元素是指向一个实际参数的指针,每个实际参数都代表一个字符串。
多级指针:多级指针被成为指针的指针。二级指针的定义格式:类型名  **变量名,三级指针的定义格式:类型名  ***变量名,如二级指针定义举例:int x,*p=&x,**q=&p。
多维数组和指向数组的指针:1.指向一维数组指针的定义: 类型名(*指针变量名)[元素个数];   
                          2.C++不支持二维数组的动态创建,最简单的方法是将二维数组转化为一维数组的方式来定义。
指向函数的指针:指针指向函数时就是让指针保存这个函数的入口地址,以后通过这个指针调用某一个函数,这个指针称为指向函数的指针,定义的格式为:
                返回类型(*指针变量)(形式参数表),例如定义一个指向一个没有参数,返回值为int型的函数int (*p)(),定义一个指向一个没有指向有一个整型参数,返回值为double型的函数,double (*p)(int)int;让指向函数的指针指向某一个特定的函数,可以通过赋值:指针变量名 = 函数名
指向函数的指针作为函数的参数:应用如用快速排序法通过strcmp()函数来比较字符串
指向函数的指针用于菜单的选择:
原创粉丝点击