C语言面试题分享(2)

一、sizeof 和 strlen 有何区别?
分析:
sizeof 是一个操作符,strlen 是库函数。

sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以结尾为‘\0‘的字符串作参数。

编译器在编译时就计算出了sizeof 的结果。而 strlen 函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际的长度。

数组做sizeof 的参数不退化,传递给 strlen 就退化为指针了。

二、strcpy、sprintf 与 memcpy 有啥区别?
操作对象不同,strcpy 的两个操作对象均为字符串,sprintf 的操作源对象可以是多种数据类型,目的操作对象是字符串,memcpy 的两个对象就是两个任意可操作的内存地址,并不限于何种数据类型。

执行效率不同,memcpy 最高,strcpy 次之,sprintf 的效率最低。

实现功能不同,strcpy 主要实现字符串变量间的拷贝,sprintf 主要实现其他数据类型格式到字符串的转化,memcpy 主要是内存块间的拷贝。

三、链表和数组有何区别?
(1)存储形式:数组是一块连续的空间,声明时就要确定长度。链表是一块可不连续的动态空间,长度可变,每个结点要保存相邻结点指针。

(2)数据查找:数组的线性查找速度快,查找操作直接使用偏移地址。链表需要按顺序检索结点,效率低。

(3)数据插入或删除:链表可以快速插入和删除结点,而数组则可能需要大量数据移动。

(4)越界问题:链表不存在越界问题,数组有越界问题。

扫描二维码关注公众号,回复: 12427156 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_44788542/article/details/111726102