1.memset、memcpy、strcpy之间的根本区别?
memset:用来对一段内存空间全部设置为某个值,一般用于对定义的字符串进行初始化为某个值
memcpy:用于内存拷贝,可以拷贝任何数据类型的对象,可以指定拷贝的数据长度
strcpy:可以拷贝字符串,遇到’\0’结束拷贝
2.常量指针和指针常量的区别?
const char * p ( 常量指针):本质上是一个指针,常量表示指针指向的内容,常量指针中,指针指向的内容不可变。
char * const p(指针常量):本质上是一个常量,是指针类型的常量,指针常量中,指针指向的地址不可变。
3.链表和数组的区别?
- 数组在内存中是一块连续的空间来存储数据,链表在内存中是一块不连续的空间,靠指针来连接多块不连续的空间,在逻辑上形成一块连续的空间
- 数组占用内存小,空间连续。 链表占用内大,空间不连续
- 数组方便排序和查找,但是插入和删除较慢。 链表方便插入和删除,但是排序和查找较慢。
4.全局变量和局部变量有什么区别?是怎么实现的,操作系统和编译器是怎么知道的?
生命周期不同:全局变量随主程序的创建而创建,随主程序的销毁而销毁,局部变量在局部函数内部,甚至局部循环体中存在,退出就不存在了。
使用方式不同:声明全局变量,整个程序都可以用到。局部变量只能在局部函数中使用,分配在栈区。
5.函数传递过程中,值传递、址传递、引用传递有什么区别?
值传递:会为形参分配内存空间,将实参的值拷贝给形参,形参的值的改变不影响实参,函数调用结束后形参释放
址传递:形参是指针变量,将实参的地址给函数,可以在函数中改变实参的值,调用时为形参指针分配内存空间,结束时释放指针变量。
引用传递:不会分配内存空间,形参只是实参的别名,形参值的改变会影响实参值,函数结束后不会释放形参。
6.引用和指针有什么区别?
- 引用必须初始化,而指针不需要,引用不占用内存
- 引用初始化之后不能改变,指针可以改变所指对象
- 不存在指向空值的引用,存在指向空值的指针