看到有人这么写.
void str_cpy(char *array_Dec, char *array_Src)
{
while (*array_ Dest++ = *array_Src++);
}
//就这么一句简单的话, 实在不理解
这个循环什么时候结束?
这句子的执行顺序是怎样的?
(*(array_ Dest++) = *(array_Src++)) ???
可我反反复复的想,这样也不对啊.诶....
望指点一二.在此感谢
先从等号右边开始
1:array_Src指向原数组首地址
2:*array_Src 取出原数组首地址指向的变量
然后是等号左边
3:array_ Dest指向目的数组首地址
4:*获取目的数组首地址指向的变量
5:步骤2的获得的变量的值赋值给步骤4的值
6:array_ Dest++;array_Src++;指向的原数组和目的数组的指针向后偏移指向下一个地址。
7:循环直到array_Src指向的变量的值为字符‘\0',对应ASIC表为整数0循环退出
这里我多说一点啦,原数组是直接赋予字符串就没问题。如果是挨个字符赋值就会因为没有结束符’\0'而导致循环出错。
这种的很容易不是你要的结果。例如这样
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "iostream" using namespace std; void str_cpy(char *array_Dec, char *array_Src) { while (*array_Dec++ = *array_Src++); } int _tmain(int argc, _TCHAR* argv[]) { char src[10]; src[0]='0'; src[1]='1'; src[2]='2'; char des[10]; str_cpy(des,src); cout<<des; return 0; }
输出结果会有乱码
函数或许改成这样好理解一点
void str_cpy(char *array_Dec, char *array_Src) { while (*array_Src!='\0') { *array_Dec=*array_Src; array_Dec++; array_Src++; } *array_Dec=*array_Src; }
谢谢啊.也是优先级的问题吗?之前也因为同个问题想了老半天....
@阿利是傻子: 优先级肯定重要了,不然看不懂
@大芝麻: 谢谢前辈指教