微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > C51定义的变量,默认值都是0吗?

C51定义的变量,默认值都是0吗?

时间:10-02 整理:3721RD 点击:

前几天看了一些其他书,用C编写的。定义的变量没有赋初值,直接就用到函数里面去了。
今天看了这个程序也是的。
大家注意看一下我定义的那几个变量。

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar temp,aa,bai,shi,ge;  //大家看一下这几个变量,定义之后,刚开始并没有赋初值
  6. uchar code table[]={
  7. 0x3f,0x06,0x5b,0x4f,
  8. 0x66,0x6d,0x7d,0x07,
  9. 0x7f,0x6f,0x77,0x7c,
  10. 0x39,0x5e,0x79,0x71};
  11. sbit dula=P2^6;
  12. sbit wela=P2^7;


  13. int main()
  14. {        
  15.         void display(uchar bai,uchar shi,uchar ge);
  16.         void delay(uint z);
  17.                 void init();
  18.                 init();
  19.         while(1)
  20.         {      
  21.                                 if(aa==20)
  22.                                 {
  23.                                         aa=0;
  24.                                         temp++;
  25.                                 if(temp==101)
  26.                                         temp=0;
  27.                         bai=temp/100;
  28.                         shi=temp%100/10;
  29.                         ge=temp%10;
  30.                                 }
  31.                 display(bai,shi,ge);
  32.         }
  33. }
  34. void delay(uint z)                     //延时函数
  35. {
  36.         uint x,y;
  37.         for(x=z;x>0;x--)
  38.                 for(y=110;y>0;y--)
  39.                                 ;
  40. }

  41. void display(uchar bai,uchar shi,uchar ge) //显示函数,显示3位数字
  42. {
  43.             dula=1;
  44.                 P0=table[bai];
  45.                 dula=0;

  46.                 wela=1;
  47.                 P0=0xfe;
  48.                 wela=0;
  49.                 delay(5);

  50.                 dula=1;
  51.                 P0=table[shi];
  52.                 dula=0;

  53.                 wela=1;
  54.                 P0=0xfd;
  55.                 wela=0;
  56.                 delay(5);

  57.                 dula=1;
  58.                 P0=table[ge];
  59.                 dula=0;

  60.                 wela=1;
  61.                 P0=0xfb;
  62.                 wela=0;
  63.                 delay(5);
  64. }
  65. void init() //初始化函数
  66. {
  67. //        temp=0;            这个变量,同样也是这样。无论我赋值为0还是直接屏蔽掉,开发板都正常显示
  68.         TMOD=0x01;
  69.         wela=0;
  70.         dula=0;
  71.         TH0=(65535-50000)/256;
  72.         TH0=(65535-50000)%256;
  73.         EA=1;
  74.         ET0=1;
  75.         TR0=1;

  76. }
  77. void timer()interrupt 1
  78. {
  79.         TH0=(65535-50000)/256;
  80.         TH0=(65535-50000)%256;
  81.         aa++;
  82. }

复制代码


之前学C的时候,定义的变量,基本都要赋值才能用。到了单片机,我叶迷糊了,为什么不赋初值,就可以使用?
定义的变量在第5行与第75行。就像那个temp变量,来个大神帮我解答一些,谢谢啦

试一下就知道了,很多c语言,现在都初始化为0

我就是试了啊,才不理解,因为之前学C的时候,基本都是先初始化再利用,但是现在看c51,居然不用初始化了。虽然我说的初始化是指的0,但是。还是理解不了

C也没有说要赋初值,只是你想用的时候只要是你需要的就行,

默认都是0.

这个是单片机C语言里的默认规范,一般不赋值均为零。例如:
uchar temp,aa = 1; //前者默认=0,后者赋值=1.

貌似c语言当中也不一定要赋初值吧

谢谢啦

自己也搞迷糊了

很多c语言的教程上 也没有说一定要给变量赋初值啊

好像是编译的时候就给默认赋值0了

不一定,,,,,,,,,,,,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top