黑马程序员技术交流社区
标题:
看到一个非常厉害的关于指针的知识,拿出来跟大家分享
[打印本页]
作者:
timehzy
时间:
2015-7-4 23:21
标题:
看到一个非常厉害的关于指针的知识,拿出来跟大家分享
用函数调用实现字符串的复制
#include <stdio.h>
void copy_string(char *to,char *from){
while (*from!= '\0') {
*to = *from;
from++;
to++;
}
*to = '\0';
}
int main(int argc, const char * argv[]) {
char a[] = "hello",b[10];
copy_string(b,a);
printf("%s",b);
return 0;
}
复制代码
然后这个copy_string函数可以简化成下面这个样子
void copy_string(char *to,char *from){
while ((*to = *from)!= '\0') {//在while循环判断的时候完成调换
from++;
to++;
}
}
复制代码
然后还可以继续简化
void copy_string(char *to,char *from){
while ((*to++ = *from++)!= '\0');//在循环条件判断的时候完成调换和指针的移动
}
复制代码
因为'\0'的ASCII码为0,所以可以继续简化为
void copy_string(char *to,char *from){
while ((*to++ = *from++)!= 0);
}
复制代码
而关系表达式
(*to++ = *from++)!= 0又可以看作是真假的判断因此可以再简化
void copy_string(char *to,char *from){
while ((*to++ = *from++));
}
复制代码
虽然这样写法不利于阅读,但是作为一种方式,确实让人认识到指针的强大
作者:
984326157
时间:
2015-7-5 01:55
不错,学习了
作者:
周位杰
时间:
2015-7-5 08:45
腻害腻害
作者:
carshoel
时间:
2015-7-5 08:56
一步一步的简化爽啊、不过那两个➕➕是不是先做赋值,再后和前指针依次➕➕,再判断条件呢
作者:
peng_gavin
时间:
2015-7-5 08:56
不错的解法
作者:
timehzy
时间:
2015-7-5 11:36
carshoel 发表于 2015-7-5 08:56
一步一步的简化爽啊、不过那两个➕➕是不是先做赋值,再后和前指针依次➕➕,再判断条件呢 ...
对对,*p++就是先取*p然后p++
作者:
疾风追马
时间:
2015-7-5 12:15
虽然还看不懂,但是支持一下~
作者:
lixianzhu0712
时间:
2015-7-5 20:39
长知识,额
作者:
弹剑
时间:
2015-7-5 21:27
感觉到指针的厉害了...
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2