一段烂代码,看不懂的进
#include <stdio.h>int mystrlen(char * str)
{
if(!*str)return 0;
else return mystrlen(++str)+1;
}
main()
{
char a;
int (*myprint)(char *,... ) = printf;
char * str = "%d\n";
a = 0;
a = 0;
scanf("%d",(char *)a);
(* myprint)(str,*(int *)a);
(* myprint)(str,mystrlen("Hello,Nisy!"));
}
哎连1+1 都看不懂 …… 递归一直找到/0
不过效率低,递归进栈消耗时间、空间也消耗
时间复杂度、空间复杂度都高....
还不容顺序查找呢... 还真的看不懂,努力 本帖最后由 hnynes 于 2010-11-5 10:18 编辑
这段代码,第一点看那个
int mystrlen(char * str)
{
if(!*str)return 0;
else return mystrlen(++str)+1;
}
这种写法效率太低,对于字符串的长度,这个确实是没有什么好办法,一般来讲无法测试长度的就,直接让调用者给个长度吧,这个并没有什么问题的。很容易的。
这个方法既然参数已经定义为了char *,就没有必要再去逐个字节地计算长度,直接一个strlen就可以了。没有必要弄得那么复杂,要不然,你就将参数改为void * 喽。
另外一点,这个也不见得支持什么非char *的类型,因为在强转为int *后,很有可能会使串中的某个字节为\0,所以这种写法在某种程序上来讲,还有错误。既然是对字符串的,直接使用strlen或者字节检查就行,递归效率太低。
int mystrlen(char * str)
{
int length = 0;
while (!str)
{
++length;
}
return length;
或者直接用
int length = 0;
if (str)
{
length = strlen(str);
}
return length;
}
再看下面的
main()
{
char a;
int (*myprint)(char *,... ) = printf;
char * str = "%d\n";
a = 0;
a = 0;
scanf("%d",(char *)a);
(* myprint)(str,*(int *)a);
(* myprint)(str,mystrlen("Hello,Nisy!"));
}
第二点呢,这个里面完全是闹眼子。
int (*myprint)(char *,... ) = printf;
定义一个这种指针纯属多余。
简单的写法就可以完成的事情,弄得那么复杂不知何用意。
main()
{
char a = "";
char * str = "%d\n";
scanf("%d",(int *)a);
printf(str, *(int *) a);
printf(str, mystrlen("Hello,Nisy!"));
}
上面我还改了a串的长度,因为在32位机上,整型数是4字节的,如果只给两个字节,会溢出。再或者你可以使用short。
当然我并不想否定这段代码的原作者的思想,只是简单的东西,就应该用最简单的办法去实现,编程开发更多的思想层面的东西,而不是技巧上的滥用,代码是写给机器看的,但同时也是给你看的。 输出0,和“HELLO,NISY!”字符长度、(*myprint)(char *,... )就是 printf("%d\n",...)。N大给重定义了。 本帖最后由 yyj4968 于 2010-11-5 22:15 编辑
#include <stdio.h>
int mystrlen(char * str) //递归求字符串长度
{
if(!*str)return 0; //若遇到 "\0" 长度为空
else return mystrlen(++str)+1;
}
main()
{
char a;
int (*myprint)(char *,... ) = printf; //定义一个函数指针指向printf函数
char * str = "%d\n"; // 定义一个格式控制字符串指针
a = 0;
a = 0;
scanf("%d",(char *)a); //输入字符串
(* myprint)(str,*(int *)a); //相当于printf("%d\n",*(int *)a)
(* myprint)(str,mystrlen("Hello,Nisy!")); //同上
} 果然看不懂!太牛了! 回复 4# hnynes
牛人~~~
这段代码是不能用在实际的工程下·~但是要是学习的话,这样能很好理解内存模型~~哈哈~~只是理解语言的精髓,不用这样吧~~/:018
页:
[1]