程序员面试之指针和应用(三)
来源:互联网 发布:零基础学云计算 编辑:程序博客网 时间:2024/05/14 04:28
1、指针和引用的区别
引用相当于一个变量的别名,或者通俗的说就是一个变量的“外号”,如果没有定义好的变量,那就没有相应的“外号”,于是指针和引用可以从以下几个方面区分,
(1) 非空性:引用在定义时必须赋值,而指针定义是可以赋值可以不赋值。
(2) 合法性测试:函数调用中,传递引用时,不需要进行合法性检验,而传递指针时,要进行合法性检验,防止传递空指针。
(3) 可修改性:引用相当于一个变量的“外号”,一旦确定,不可改变,而指针可以随意改变。
(4) 应用却别:在函数调用过程中,若传递的变量或者对象地址不会发生变化,则选择传递应用要优于传递指针,否则必须传递指针。
2、指针需要赋予合理的地址后才可以使用
int *ptr;*ptr = 25; //未给指针赋初始值,程序崩溃int *ptr = 0x8000;*ptr = 25; //随意的给指针赋初始值,较危险
3、函数指针
(1) 函数指针:void (*f)()
(2) 函数返回值指针:void* f()
(3) const指针:const int*
(4) 指向const的指针:int * const
(5) 指向const的const指针:const int * const
(6) double* (*gh)[10],gh是指向一个一维数组的指针,数组中的元素都是 doublue*型。
(7) double (*f[10])(),f是一个数组,f有10个元素,元素都是函数指针,指针指向的函数类型都是没有参数且返回值为double的函数。
(8) Long (*fun)(int),fun是函数指针,指向的函数类型为参数为int型,返回值为long型。
(9) int (*(*F)(int,int))(int),F是一个函数指针,指向的函数类型为,参数为int,int,返回值为函数指针,返回的函数指针,参数为int,返回类型也为int。
4、指针数组和数组指针
(1) int (*a)[10],数组指针,指向元素为int型,且包含10个元素的数组。
(2) int *a[10], 指针数组,相当于存储了10个int*型的指针。
5、C++中有了malloc/free,为什么还需要new/delete
malloc/free 是C++/C中的库函数,而new/delete是C++中的操作符,二者都用于内存的分配。但对已非内置数据类型,malloc/free无法满足动态对象的要求,对象在创建时要自动调用构造函数,对象在消亡前要自动调用析构函数。由于mallo/free是库函数,无法将调用构造函数和析构函数的任务强加给malloc/free。因此C++需要一个能完成动态内存分配和初始化工作的new操作,以及能完成清理与释放内存的delet操作。
6、智能指针
C++中智能指针的引入,主要是为了防止内存泄露。其原理就是通过创建一个对象来管理内存资源,每个对象申请完内存后,将返回的地址传递给智能指针,程序员不需要在担心内存不能被即使释放的问题,智能指针会帮助你在适当的时候完成内存的释放。
auto_ptr:现在使用的较少,它的特点是,当auto_ptr被拷贝时,原来的那一份会被删除。
7、this指针
this指针时时刻刻指向实例本身。
(1) this指针本质是一个函数参数,只是被编译器隐藏起来了,全局函数和静态函数不能使用this指针,只有成员函数可以使用。
(2) this指针在成员函数开始之前被构造,在函数结束后被清除,this指针的生命周期与普通的函数参数一样。当调用一个类的成员函数时,编译器会将this指针作为函数的参数传递进去。由下例可知,this是一个常指针,是不能被修改的。
A a;a.func(10);//等于 a.func(&a,10)
在编译器看来,func函数的原型是: int func(A* const this, int p)(3) this指针不占用对象的空间,只会占用参数传递时的空间,或者直接占用一个寄存器。
- 程序员面试之指针和应用(三)
- (二)C系程序员面试必知必会之数组和指针不是问题
- 程序员面试宝典随笔记(一)指针和++相关
- 程序员面试宝典随笔记(一)----引用和指针
- Java 程序员面试之葵花宝典 之三(转贴)
- 面试复习三、指针和数组(一)
- 程序员常见面试之 数据库 知识点小结(三)
- 程序员面试金典(三)--数组和字符串
- 【程序员面试宝典读书笔记】指针数组和数组指针
- 程序员面试(4):指针数组和数组指针
- C指针编程之道(三)- 数据结构中指针的应用
- 指针的简单应用(三) 之指针与数组续
- 程序员面试100题之十五 和 三十, 含有指针成员的类的拷贝(异常安全的赋值运算符重载)
- 程序员面试宝典笔记2--指针和引用
- 程序员面试宝典(三)P107
- 程序员面试宝典(三)P107
- 程序员面试的一些知识点(三)
- 程序员面试宝典三
- c# DateTime.Now 大写英文月份
- Eclipse常用插件在线安装
- 《AndroidStudio每日一贴》9. 如何使用导航栏快速切换项目中的视图?
- hdoj 3308 LCIS 【线段树单点更新 + 区间合并】【求解最长递增序列 的长度】
- asp.net request 获取前台数据 disabled
- 程序员面试之指针和应用(三)
- 技术总结
- Oracle goldengate的OGG-01004 OGG-1296错误
- 欢迎使用CSDN-markdown编辑器
- 文件描述符标志和文件状态标志区别 http://blog.csdn.net/hittata/article/details/8665892
- iOS核心动画----基础动画
- Android 用httpUtils绑定setion和cookin
- 2015网易游戏笔试题04
- Android开发之播放RTSP协议视频流