指针的魅力
序
指针说:love me,love me!
但是他对指针说:I hate u,I hate u!
……
指针仅仅是作为指针,我们可以把它当做有用的工具,为我们提供便利与好处。说起工具不得不让我想起一样东西——锄头,因为原人类有了锄头才使人类文明进入了开荒造田的农业时代,解决了温饱,开启了人类新纪元。可以这么说吧锄头使人类文明得到进步,没有锄头也就没有今天的我们,其地位与重要性可想而知。那么我们的指针何以能发挥像锄头那样惊人的魅力呢?
魅力1 算法之找我的名字——简单,灵活,快捷
以下算法功能是在一个字符串中查找长度为8的一个字符子串,比如我的名字“ZhanHang”就是一个8长度的字串。算法解释:因为字串myname的长度为8,也就是它是一个8字节的内存连续的数组,而myname指向这一段内存。又Long long 指针类型是一个指向8字节内存的类型,因此就可以将myname转换成long long 类型指针,如此在进行子串的比较时,就可以直接比较两个long long 类型的变量即可,免去了对子串进行遍历的麻烦。详情请看代码。
#include <stdio.h>
int find_my_name(const char* str, int str_len, const char* myname)
{
long long *pkey = (long long*)myname;
long long *curr_str = NULL;
str_len = str_len - sizeof(long long); //此处是为了for循环作的优化处理,因为后面7个字符不需要遍历检测了
for(int i=0; i<=str_len; i++)
{
curr_str = (long long*)&str[i]; //得到一个新的子串
if( *pkey == *curr_str ) //判断两个字串是否相等
return i+1; //返回子串在字串中的位置
}
}
/**
Author:花心龟
Blog:http://blog.csdn.net/zhanxinhang
**/
int main()
{
char str[]="alZhanhangadf";
char myname[]="Zhanhang";
printf("my name at %d\n",find_my_name(str,sizeof(str)/sizeof(char),myname));//输出结果是3
return 0;
}