C++知识总结(4)

来源:互联网 发布:网络视听审核员证书 编辑:程序博客网 时间:2024/05/25 21:37

16引用和指针的区别

相同点:

        都是地址的概念;

       指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。 

不同点:

  指针是一个实体,而引用仅是个别名;

  引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”,指针可以“见异思迁”;

  引用没有const,指针有constconst的指针不可变;

  引用不能为空,指针可以为空;

        “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(xy);

其中xy是形式参数,f是函数名,调用后返回一个指向整型数据的地址指针。f(xy)是函数,其值是指针。

如:char *ch();表示的就是一个返回字符型指针的函数。

 

20、谈一谈使用malloc的具体流程

1.分配内存。(分配成功,返回内存的首地址;分配不成功,返回NULL)。

2.检查是否分配成功

3.清空内存中的数据 malloc分配的空间里可能存在垃圾值,因此我们需要清空,可以用

4.使用内存

5.释放内存

原创粉丝点击