2018-07-27 10:51

题一,sizeof strlen 有何区别? 

题二, strcpysprintf memcpy 有啥区别?

题三,链表和数组有何区别?


题一参考答案:


sizeof 是一个操作符,strlen 是库函数。sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以结尾为‘\\0‘的字符串作参数。
编译器在编译时就计算出了sizeof 的结果。而 strlen 函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际的长度。
数组做sizeof 的参数不退化,传递给 strlen 就退化为指针了。
注意:有些是操作符看起来像是函数,而有些函数名看起来又像操作符,这类容易混淆的名称一定要加以区分,否则遇到数组名这类特殊数据类型作参数时就很容易出错。最容易混淆为函数的操作符就是sizeof

题二参考答案:


三者主要有以下不同之处:
操作对象不同,strcpy 的两个操作对象均为字符串,sprintf 的操作源对象可以是多种数据类型,目的操作对象是字符串,memcpy 的两个对象就是两个任意可操作的内存地址,并不限于何种数据类型。
执行效率不同,memcpy 最高,strcpy 次之,sprintf 的效率最低。
实现功能不同,strcpy 主要实现字符串变量间的拷贝,sprintf 主要实现其他数据类型格式到字符串的转化,memcpy 主要是内存块间的拷贝。
说明:strcpysprintf memcpy都可以实现拷贝的功能,但是针对的对象不同,请根据实际需求,来选择合适的函数实现拷贝功能。

题三参考答案:


数组和链表有以下几点不同:


1存储形式:数组是一块连续的空间,声明时就要确定长度。链表是一块可不连续的动态空间,长度可变,每个结点要保存相邻结点指针。
2数据查找:数组的线性查找速度快,查找操作直接使用偏移地址。链表需要按顺序检索结点,效率低。
3数据插入或删除:链表可以快速插入和删除结点,而数组则可能需要大量数据移动。
4越界问题:链表不存在越界问题,数组有越界问题。
说明:在选择数组或链表数据结构时,一定要根据实际需要进行选择。数组便于查询,链表便于插入删除。数组节省空间但是长度固定,链表虽然变长但是占了更多的存储空间。

预知更多干货请关注微信公众号百问科技(id: baiwenkeji)

 


评论