作者:广东在线游戏网日期:
返回目录:游戏资讯
void strcpy(char t[],char s[]) {
while(*t++ = *s++);
}
以上就是一个完整的字符串zhidao复制函数,不再需要其他操作。在下面的语句专中,
do {
*t++ = *s++;
}while(*s);
复制到最后一个字符后,完成 t++ 和 s++操作,此时s指向'\0',从而结束循环,也就是说,该过程没有将结束符'\0'写到t中。属
while(*s++=*t++)
这里实现了四个操作。来
1 *s = *t, 即将s指向内源存赋值为t指向内存的值;百
2 执行s的自度加操作;
3 执行t的自加操作;
4 判断执行自加前的*s值,如果知*s为0,那么退出循环。道
可以写成等价的for循环。
for(; *s; s++, t++)
*s = *t;
int aaa(char *s)
{
char *t=s;
while (*t++);
判断知*t的值:
1,如果不为0,则继续while循环,执行t++,指针指向下一个
2,如果为0,跳出while循环,执行t++,指针指向下一个
t--;
return (t-s);
}
比如数组道char temp[] = {1, 2, 3, 4, 5, 6, 7, 0, 8, 9};
执行aaa(temp);
那么当while(temp[7])时(temp[7] = 0;),跳出循环,t = temp[8] = 8;
然后t--;
t= temp[7] = 0;
t-s就是内从temp[0]到temp[7]跳过了容多少地址空间,答案是7。
不知道你明白了没有?希望对你有帮助!
说起来复杂,直接改写一个do-while循环就好理解了:do{*s=*t++;} while(*s++);
如果硬要解释原程序的话,那百表示的是指针t所指向数组度的元素赋值给s所指向数组,并且t指针和s指针向后移动一位。具体来说:
先将*t的值问赋给等号左边,然后t指向地址往后面移动一位。
因为++自增运算表示答的一些特殊性,s++表示的是s自增之前的专地址,故*s++表示的还是原来的地址上的值(也就是原来的*s),这时候就会被赋值为*t(在t指针还没移动前的值)。
while循环判断*s的值是否是0,不是0就进入循环,并且s指向位置后移。如果是0,出循环,s指向位置依然后移一位。
注意:不管这个while循环进不进入,s和t指向地属址都会往后移动一位。