C语言的数据类型和变量

变量:

在C中,变量包含内存位置。程序可以通过变量的名称,访问这个变量的值。赋值的过程,就是修改内存单元存储数据的过程。
例如,我们使用 int a = 1;,进行赋值。其中a在内存中,有一个自己的地址,我们假设这个地址为2010,在2010这个内存单元里面值是1。a的内存地址是2010,这个2010 跟 1 的关系,类似于你家住址和你的关系。了解这个就是了解指针的基础。

命名变量:
1.名称可以包含字母,数字和_.
2.名称开头只能是字母或者是_
3.大小写敏感,Test.c 跟 test.c不是一个文件。
4.名称不能使用关键字。
5.不要使用_X 或者__作为变量名称,因为这都是系统库使用的变量名称。X为大写字母 另外,为了便于阅读代码,请使用有意义的变量名称进行定义
声明变量

data_type name_of_variable;

为什么要使用date_type?C语言是个强类型语言,我们在使用变量的时候必须要添加类型,关键是由于:C的编译器可以通过类型,对这个变量分配相对应的内存,这就可以节省更多的内存空间。

int a;
int b;
int c;

=> int a,b,c;

计算数值时,如果你再float和double类型中徘徊的时候,我建议你使用double。
当然你不在意精度的话,请使用float类型,使用float类型时,计算速度会很快,分配的内存也相对少些。但是也会带来很多让你非常难以debug的错误。

int main(void)
{

        float a = 3.1;
        if (a == 3.1)
                printf("Yes\n");
        else
                printf("No\n");

        printf("%.9f\n",a - 3.1);

        return 0;

}

如果定义a为float类型,那么结果是:
No
-0.000000095

如果定义为double类型,结果是:
Yes
0.000000000

复杂的变量定义

static const unsigned int a;

相对static变量定义,缺省的变量类似是auto类型,剩下的还有extern和register,一共是4种。
我们回头再说这些,暂时只要知道这些关键字都是和寄存器相关即可

另外const这个关键字,其实意思就是read-only,只读。

自动转换问题
int main(void)
{
  int i = 6;
  double j = i/4;
  printf("The j is %f\n",j);

}

运算结果为:
1.000000

实际上,由于i/4,i属于int,4 也是int,i/4得到一个int类型的数值 1。然后将1转变成double类型 1.000000。如果想得到更精确的结果,请讲4,写成4.0

另外就是char与int类型转换问题,由于ASCII码的范围是0-255,所以char的变量,在int表示就只能在这个范围内,int ch,这个变量ch,只能在0-255之前赋值。

#include <stdio.h>

int main(void)
{
        int ch = 65;
        printf("The ch is %c\n",ch);

}

结果:
The ch is A

#include <stdio.h>
int main(void)
{
  int a = -20;
  unsigned int b = 200;

  if(a < b)
    printf("Yes\n");
  else
    printf("No\n");

  return 0;
}

结果:
No

因为在做比较时,int 会先转变成unsigned int,然后再做对比。但是-20转变成无符号整数时,这时a = 2^32 - 20, 自然a > b

还有类似以下的强制转换:
int a = (int)1.99 * 10

结果为:10

类型限定

const 就是只读类型,既然是只读,我们无法在程序其他位置为其赋值,所以只能在声明的时候就对其进行赋值。
const int a = 10

作为限定符的volatile,用的相对少很多。这个关键字的作用是通知编译器,这个变量可能会改变,即便它在程序中似乎没有被修改。

int flag = 0;
while(flag != 100)
{
...
}

这个循环似乎是个死循环,然而flag可以被隐式修改,所以我们可以定义flag为:
volatile int flag = 0 ;

define标识符

#define macro_name value

其实这个不是变量,只是一个宏。也就是说在编译器编译前,会有以一个预编译过程,这个过程会将之前定义的macro_name 用 value进行一个替换而已。这macro_name 也不会被分配内存空间
不过通过这种方式,我们会很方便的进行设置一些常量,并方便进行修改。
关于宏定义,将来还会拿出来学习一下的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值