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);\
}