1. C 语言的 malloc 和 C++ 中的 new 有什么区别?
2. 简述strcpy、sprintf 与memcpy 的区别?
3. 什么是函数指针?
函数指针的定义方式为:
函数返回值类型 (* 指针变量名) (函数参数列表);
“函数返回值类型”表示该指针变量可以指向具有什么返回值类型的函数;“函数参数列表”表示该指针变量可以指向具有什么参数列表的函数。这个参数列表中只需要写函数的参数类型即可。
函数指针的定义就是将“函数声明”中的“函数名”改成“(*指针变量名)”。但是这里需要注意的是:“(*指针变量名)”两端的括号不能省略,括号改变了运算符的优先级。如果省略了括号,就不是定义函数指针而是一个函数声明了,即声明了一个返回值类型为指针型的函数。
那么怎么判断一个指针变量是指向变量的指针变量还是指向函数的指针变量呢?首先看变量名前面有没有“*”,如果有“*”说明是指针变量;其次看变量名的后面有没有带有形参类型的圆括号,如果有就是指向函数的指针变量,即函数指针,如果没有就是指向变量的指针变量。
最后需要注意的是,指向函数的指针变量没有 ++ 和 -- 运算。
4. C语言的指针和引用和c++的有什么区别?
1) 指针有自己的一块空间,而引用只是一个别名;
2) 使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小;
3) 作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象;
4) 可以有const指针,但是没有const引用;
5) 指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能被改变;
6) 指针可以有多级指针(**p),而引用止于一级;
7) 指针和引用使用++运算符的意义不一样;
8) 如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄露。为什么?
(new 出来的对象 是个地址,以后delete 也要这份地址,但是不可以delete 引用。这个不是必须使用指针,是new返回的就是指针,指向内存的地址。设计上 指针是为了兼容C而存在 ,引用是为了重载而存在。)
