C++知识总结(4)
来源:互联网 发布:网络视听审核员证书 编辑:程序博客网 时间:2024/05/25 21:37
16、引用和指针的区别
相同点:
都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。
不同点:
指针是一个实体,而引用仅是个别名;
引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”,指针可以“见异思迁”;
引用没有const,指针有const,const的指针不可变;
引用不能为空,指针可以为空;
“sizeof引用”得到的是所指向的变量(对象)的大小,而“sizeof指针”得到的是指针本身的大小;
指针和引用的自增(++)运算意义不一样;
引用是类型安全的,而指针不是(引用比指针多了类型检查
可以使用多级指针,而不能使用多级引用
17、什么时候需要使用“常引用”
如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。常引用声明方式:const类型标识符&引用名=目标变量名;
引用型参数应该在能被定义为const的情况下,尽量定义为const。
18、什么是野指针?如何避免野指针?
野指针:随机指向一块没有访问权限或已经被释放了的内存的指针,会引起内存泄漏(不好释放内存)
避免野指针:养成良好的编程习惯
当定义一个没有指向的指针时,将其指向NULL。(NULL代表内存的0地址,并且NULL是不允许做任何操作的)
当想要向指针指向的内存空间操作时,用malloc分配内存。(在堆空间里分配内存)
malloc 返回值为堆上开辟空间的首地址
使用malloc分配空间时,按照流程来
19、函数指针与指针函数的区别
函数指针
函数指针其实就是指向一个函数地址的指针,数值和函数一样都有自己的存在空间,也都有程序的首地址,数组名表示着整个数组代码占用内存的首地址,同理函数名也就是整个函数代码占用内存的首地址,函数指针就是指向函数占用内存的首地址,其定义格式如下:
type (*name)(参数列表);//函数返回值 (*函数指针)(参数列表)
例如定义一个函数返回值为int型的,参数列表为(int x)的函数,然后定义一个函数指针来指向他。
int func(int x);//定义函数
int (*f)(int x);//定义函数指针
f=func;//这样函数指针*f就指向函数func了
需要注意的是:函数指针的返回值和参数列表要和指向的函数的必须完全一样,这样才可以对其进行赋值。
2、指针函数
一个函数不仅可以带回一个整型数据的值,字符类型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元。
返回指针的函数,一般定义格式为:
类型标识符 *函数名(参数表)
int *f(x,y);
其中x,y是形式参数,f是函数名,调用后返回一个指向整型数据的地址指针。f(x,y)是函数,其值是指针。
如:char *ch();表示的就是一个返回字符型指针的函数。
20、谈一谈使用malloc的具体流程
1.分配内存。(分配成功,返回内存的首地址;分配不成功,返回NULL)。
2.检查是否分配成功
3.清空内存中的数据 (malloc分配的空间里可能存在垃圾值,因此我们需要清空,可以用
4.使用内存
5.释放内存
- C语言知识总结(一)
- c语言知识总结(一)
- C语言知识总结(二)
- C语言知识总结(三)
- C一些知识总结
- C一些知识总结
- keil c 知识总结
- c语言 知识总结
- keil c 知识总结
- C Assignment2 知识总结
- C语言知识总结
- C高级知识总结
- C语言知识总结
- C语言知识总结
- C语言知识总结
- C语言知识总结
- C语言知识总结
- c语言知识总结
- 编辑距离问题
- SQL LIKE操作符
- three.js全景视频
- HDU4237 The Rascal Triangle
- DNS
- C++知识总结(4)
- find the most comfortable road||HDU1598
- Just a Hook (HDU
- 数据源--Springboot配置使用Druid数据源
- 1069. The Black Hole of Numbers (20) -----C++
- 解决pycharm中中文列表输出'\xe5\xa4\xa7\xe8\x92\x9c'之类的字符串
- 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/ch
- Android动画效果之- Property Animation(属性动画)
- hdu 4027 Can you answer these queries? 线段树