为了账号安全,请及时绑定邮箱和手机立即绑定

C语言基础问题,这里不理解

C语言基础问题,这里不理解

C#
白衣染霜花 2018-12-06 22:45:14
include <stdio.h> main() { int i=2,j=3,k; k=i+j; { //这里突然出现的大括号是什么意思? int k=8; if(i=3) printf(“%d”,k); else printf(“%d”,j); } printf(“%d%d”,i,k); } 运行结果是835 主要就是看不懂这个大括号是什么意思,希望可以简单讲一下程序运行的步骤。谢谢
查看完整描述

8 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

那这个程序是怎么运行的呢?为什么答案是835?为什么定义了两次k?为什么代码块外面的i变了,k却没变?

查看完整回答
反对 回复 2018-12-24
?
侃侃无极

TA贡献2051条经验 获得超10个赞

帮你格式化:

include <stdio.h>
main()
{
    int i=2,j=3,k;
    k=i+j;
    { //这里突然出现的大括号是什么意思?
        int k=8;
        if(i=3)
            printf(“%d”,k);
        else
             printf(“%d”,j);
     }
     printf(“%d%d”,i,k);
}

如果谁故意写成这样,那就是找抽型。if(i=3)肯定是true,因为i是正数,所以输出了8,最后那个print的时候k又变成了5了,因为这个两个k的作用域不一样,那个大括号里面的k的作用域仅限于大括号里面。

以上回答是我脑补的,在下并不熟悉C语言

查看完整回答
反对 回复 2018-12-24
?
暮色呼如

TA贡献1853条经验 获得超9个赞

谢谢,可是可不可以解答一下我的疑问(ㄒoㄒ)

查看完整回答
反对 回复 2018-12-24
?
HUX布斯

TA贡献1876条经验 获得超6个赞

@怡红公子0526:

如果谁故意写成这样,那就是找抽型。if(i=3)肯定是true,因为i是正数,所以输出了8,最后那个print的时候k又变成了5了,因为这个两个k的作用域不一样,那个大括号里面的k的作用域仅限于大括号里面。

以上回答是我脑补的,在下并不熟悉C语言

查看完整回答
反对 回复 2018-12-24
?
皈依舞

TA贡献1851条经验 获得超3个赞

@会长: 谢谢

查看完整回答
反对 回复 2018-12-24
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

i 变了是因为 if(i=3)

这个语句是 把 i的值赋值为3,再判断i是否为正数

k 没变是因为楼上所说,k的作用域不一样。大括号里和大括号外的是两个k,所以括号外的k 不变。

查看完整回答
反对 回复 2018-12-24
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

此处的大括号代表这里新开辟了一个作用域。在括号内重新定义的k,只在这个作用域内起作用,在这个括号中作用域外部的k的优先级是没有这个内部定义的k高的。举个形象的比喻,在这个小城镇(作用域内),我(作用域内的k)才是老大!但是出了这个小城镇(作用域外部),你(作用域外的k)就是老大了!

至于i=3,这是一条赋值语句,显然是成立的,必定为ture。在此需要注意的是,i并没有重新定义,只是给作用域外定义的i重新赋值,这个i,还是作用域外的i。

第一个printf输出的是作用域内的k,值为8。第二个printf输出的是作用域外的i和k,值为3和5。

目测这是一道c语言类似于国家二级计算机考试的题目。纯属是为了考你对细节的理解而出的,正儿八经写程序不会像他这样写的,这样写的代码非常糟糕。

查看完整回答
反对 回复 2018-12-24
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

这个大括号的意思是表示一个代码段,没什么意思,相当于文章中的一个段落。

查看完整回答
反对 回复 2018-12-24
  • 8 回答
  • 0 关注
  • 675 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信