鱼C论坛

 找回密码
 立即注册
查看: 793|回复: 2

关于短路求值的一个问题

[复制链接]
发表于 2022-2-6 23:19:48 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

int main()
{
        char ch[6] = "FishC";
        int i;

        printf("请输入你想访问的字符序号(0~5):");
        scanf("%d", &i);

        if (!(i >= 0 && i <= 5 && printf("%c\n", ch[i])))//逻辑值为真打印ch[i]对应的字符,逻辑值为假打印非法访问四个字,应该怎么理解!()用两个逻辑与(&&)连接的这串代码呢?(明白整体想表达的意思,但是自己不懂得解释为什么这么输)
        {
                printf("非法访问!\n");
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-7 00:19:14 | 显示全部楼层
当i在0~5且出处正确时  (i >= 0 && i <= 5 && printf("%c\n", ch[i])) 返回真 否则运行  printf("非法访问!\n");
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-7 13:27:48 | 显示全部楼层
如果 i < 0,
首先 条件 中的 i >= 0 为假,然后条件直接为真(执行非法访问),不继续去计算后面的。
如果 i > 5,
首先 条件 中的 i >= 0 为真,但是 条件 中的 i <= 5 为假,然后条件直接为真(执行非法访问)。
如果 i >= 0 并且 i <= 5,
首先 条件 中的 i >= 0 为真,然后 条件 中的 i <= 5 为真,printf('%c\n', ch[i]) 返回 2(也是真),然后条件为假(不执行非法访问)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 19:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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