|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
第24行的减2到底减了啥啊,是地址向前移动了两位吗?
然后第27行的while ((*target1++ = *target2++) != '\0')是什么意思?比如我第一行输入了whose,第二行输入了is,那么第一行指针是从0到6,也就是w/h/o/s/e/回车/\0停下来后,这时候指针所指向的地址就是\0这个地址,然后这前面24行的减2,就是指向原本e这个位置?然后*target2一开始是指向i,然后又赋值给了target1,那不是把e给覆盖成i了嘛?
- #include <stdio.h>
- #define MAX 1024
- int main()
- {
- char str1[2 * MAX]; // 确保连接后不越界
- char str2[MAX];
- char *target1 = str1;
- char *target2 = str2;
- printf("请输入第一个字符串:");
- fgets(str1, MAX, stdin);
- printf("请输入第二格字符串:");
- fgets(str2, MAX, stdin);
- // 将指针指向 str1 的末尾处
- while (*target1++ != '\0')
- ;
- // 我们希望 str1 最后边的 '\0' 和 '\n' 都被覆盖掉
- target1 -= 2;
- // 连接字符串
- while ((*target1++ = *target2++) != '\0')
- ;
- printf("连接后的结果是:%s", str1);
- return 0;
- }
复制代码
取值和自增在一个表达式,是一个整体。
表达式 *target1++运算出来就是返回了target1的值并后移操作
跟后面与'\0'比较没有关系,外面再怎么对这表达式的值进行操作都没关系。能得到表达式的值本身就说明它里面该操作的都操作完了
你想的那种应该写成
- target1 != '\0' ? target++ : 0
复制代码
|
|