两个C语言面试题---strlen()的实现 和 宏的应用

来源:互联网 发布:模拟退火算法的代码 编辑:程序博客网 时间:2024/05/16 07:43

1.不用局部变量和全局变量实现strlen库函数 

一般用有变量的实现方法是:

(1)、不管效率的简单的实现

 size_t strlen_a(const char * str) {     size_t length = 0 ;     while (*str++ )         ++ length;     return  length;}
也可以稍加改进下是:

size_t strlen_b(const char * str) {     const char *cp =  str;     while (*cp++ )          ;     return (cp - str - 1 );}
但是题目要求不能使用变量,所以只想到用递归来解了

int myStrlen(char *str){    if(NULL == str)        return 0;    if(*str == '\0')         return 0;    return myStrlen(str+1) + 1;}
可能还会有更好的方法,欢迎提出。

2、只有两个数据,写一个交换数据的宏;

普通的解法是:

#define mySwap(a, b) a ^= b, b ^= a, a^= b
或者是:

#define mySwap(a, b) a = a + b, b = a - b, a = a - b
但问题出现了,要是浮点数怎么办,而且第二个还有可能会发生溢出等等现象。
所以出现另一种解法是:

#define max(x,y) ({typeof(x) temp; temp=x;x=y;y=temp;})
还有另一种更好的方法,也是本人最喜欢的方法:就是使用内存拷贝的方法

#define SWAP(a, b)\{\    int size = sizeof(a);\    char* temp = (char*)malloc(size);\    memcpy(temp, &a, size);\    memcpy(&a, &b, size);\    memcpy(&b, temp, size);\    free(temp);\}





原创粉丝点击