• 已解决 73488 个问题
  • 已帮助 5994 位优秀工程师

送分题:C语言变量问题

dos 2016-12-10 浏览量:837

程序思路大概是这样的:

main()

{

int a=1;

if(a==1)//-------①

{a=1;}//---------②

else

{a=0;}

}

这个程序一直在在main中运行,1.当①成立时,②是不是就再次给a变量赋值?还是不用赋值?

2.是不是再在a的地址中写1,在main()中国一直循环写下去?

3.求大神帮我解答这个问题,因为我打算今天就要按流程图来写程序了

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 1. 會再次賦值,但可能依照編譯器優化程度(-O1,-O2,-O3...)會被節省掉

    2. main只會從頭到尾執行一次,所以為什麼無系統(裸機)或者RTOS需要在最後擺放While(1)產生無窮迴圈,並將要一直處理的程式碼擺在While裡,防止main結束後CPU中止,因此各變數初始化只會一次,這就是為什麼Arduino主體有Setup(相當於初始化),loop(相當於While)

    3. 程式就是由循序,條件,迴圈三大要素組合而成,已解答,加油


    • 发布于 2016-12-10
    • 举报
    • 评论 2
    • 2
    • 0
dos 回复了 MOP:我想再次确认下,在while(1)中。a地址会不会再次被写入内容?(原本a=0;突然a=1;a地址肯定会被写入数据。那么原本a=1;突然程序下一次再执行a=1;那么a地址会被写入数据么?) 回复
MOP 回复了 dos:不開任何優化的話,一定會再寫一次,所以您可以改成 if(a!=1) a=0; 這樣就不會有那種問題 回复

其他答案 数量:3
  • 哦,是这样啊
    • 发布于2016-12-10
    • 举报
    • 评论 5
    • 1
    • 0
dos 回复了 999 :什么意思? 回复
dos 回复了 999 :你意思是说:就算a地址中的数据是1,程序执行到②哪里a地址中的值还会再次被数据1覆盖?对么 回复
999 回复了 dos :1、main{} 中的代码不会自己循环,除非你加上while、for这样的循环语句。否则就执行一遍就结束,除非你重启单片机。 回复
999 回复了 dos :变量a,和a的地址,这是两个概念!别混着说,每个变量都有它的地址,地址和变量本身不一样。这块你学习一下c语言的指针那一部分的知识。 回复
999 回复了 dos :if(条件){代码块一;}else{代码块二;} 如果“条件为真”,则执行“代码块一”,否则执行“代码块二;”。单片机是傻的,不管你之前做过啥,语句一定会按照这样的规则执行。(编译器神马的你这个阶段暂时不必考虑) 回复

  • 你这样就是在一直循环,main()就是在充它里边的第一行开始执行,到了最后一行,再跳到开始的一行,所以开始的都是一个初始化的函数,在最后一个while(1)的函数,叫他在这里边循环,不至于老是从第一行开始!
    • 发布于2016-12-10
    • 举报
    • 评论 1
    • 1
    • 0
dos 回复了 瞎折腾 :那么在最后一个while(1)的函数,叫他在这里边循环,是不是a地址就循环写同一个内容1?还是a地址内容本来就是1而不用再写数据? 回复

  • main()
    {

    int a=1;

    while(1)

    {

    if(a==1)//-------①
    {a=1;}//---------②
    else

    {a=0;}

    }


    }

    那么这样呢,1.当①成立时,②是不是就再次给a变量赋值?还是不用赋值?

    2.是不是再在a的地址中写1,在while()中一直循环写下去?​

    • 发布于2016-12-10
    • 举报
    • 评论 1
    • 0
    • 0
瞎折腾 回复了 dos :是再次给a赋值,while(1)就是一个永远跳不出来的循环 回复

送分题:C语言变量问题