鱼C论坛

 找回密码
 立即注册
查看: 1588|回复: 5

[已解决]从指针开始已经看不懂小甲鱼的程序了

[复制链接]
发表于 2022-5-4 16:10:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
}
最佳答案
2022-5-4 16:47:00
1613551 发表于 2022-5-4 16:34
是因为用的++,到了\0,虽然退出循环了,最后还是会+1吗

取值和自增在一个表达式,是一个整体。
表达式 *target1++运算出来就是返回了target1的值并后移操作
跟后面与'\0'比较没有关系,外面再怎么对这表达式的值进行操作都没关系。能得到表达式的值本身就说明它里面该操作的都操作完了

你想的那种应该写成
target1 != '\0' ? target++ : 0
uTools_1651650547855.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-4 16:12:15 | 显示全部楼层
好像有点理解指针的妙用了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-4 16:29:46 | 显示全部楼层
while (*target1++ != '\0')
停在\0后面,不是在\0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-4 16:34:25 | 显示全部楼层
风车呼呼呼 发表于 2022-5-4 16:29
停在\0后面,不是在\0


是因为用的++,到了\0,虽然退出循环了,最后还是会+1吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-4 16:47:00 | 显示全部楼层    本楼为最佳答案   
1613551 发表于 2022-5-4 16:34
是因为用的++,到了\0,虽然退出循环了,最后还是会+1吗

取值和自增在一个表达式,是一个整体。
表达式 *target1++运算出来就是返回了target1的值并后移操作
跟后面与'\0'比较没有关系,外面再怎么对这表达式的值进行操作都没关系。能得到表达式的值本身就说明它里面该操作的都操作完了

你想的那种应该写成
target1 != '\0' ? target++ : 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-4 16:50:03 | 显示全部楼层
风车呼呼呼 发表于 2022-5-4 16:47
取值和自增在一个表达式,是一个整体。
表达式 *target1++运算出来就是返回了target1的值并后移操作
跟 ...

懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 18:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表