从指针开始已经看不懂小甲鱼的程序了
第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; // 确保连接后不越界
char str2;
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;
} 好像有点理解指针的妙用了 while (*target1++ != '\0')
停在\0后面,不是在\0 风车呼呼呼 发表于 2022-5-4 16:29
停在\0后面,不是在\0
是因为用的++,到了\0,虽然退出循环了,最后还是会+1吗 1613551 发表于 2022-5-4 16:34
是因为用的++,到了\0,虽然退出循环了,最后还是会+1吗
取值和自增在一个表达式,是一个整体。
表达式 *target1++运算出来就是返回了target1的值并后移操作
跟后面与'\0'比较没有关系,外面再怎么对这表达式的值进行操作都没关系。能得到表达式的值本身就说明它里面该操作的都操作完了
你想的那种应该写成
target1 != '\0' ? target++ : 0
风车呼呼呼 发表于 2022-5-4 16:47
取值和自增在一个表达式,是一个整体。
表达式 *target1++运算出来就是返回了target1的值并后移操作
跟 ...
懂了
页:
[1]