支持的类型

image.png

  1. char 1个字节
  2. short 2个字节
  3. int 4个字节
  4. float 4字节
  5. double 8个字节
  6. long windows 4字节,linux 32 4字节, 64 8字节

image.png

siezof运算符

计算的是在内存中的大小
sizeof是单目运算符,用来计算操作数在内存中占据的字节数,其操作数既可以是括在圆括号中的类型标识符,其返回值是size_t类型,即无符号整数

sizeof(short);    //返回2
sizeof(long);    //返回4
sizeof(int);    //不确定,取决于不同的操作系统

返回的是占用空间大小是为这个变量开辟的大小,而不只是他用到的空间

要注意数组名和指针变量的区别。通常情况下,我们总觉得数组名和指针变量差不多,但是在用sizeof的时候差别很大,对数组名用sizeof返回的是整个数组的大小,而对指针变量进行操作的时候返回的则是指针变量本身所占得空间,在32位机的条件下一般都是4。而且当数组名作为函数参数时,在函数内部,形参也就是个指针,所以不再返回数组的大小

变量

在程序运行过程中,其值可以改变
变量在使用前必须先定义,定义变量前必须有相应的数据类型

声明和定义区别
声明变量不需要建立存储空间

extern int a;

定义变量还需建立存储空间

//extern关键字只做声明,不能做任何定义
//声明一个变量a,a在这里没有建立存储空间
extern int a;
a = 10; // err, 没有空间不可以赋值

int b = 10;  //定义一个变量b, b的类型为int, b赋值为10

getchar();
return 0;

从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所
有的声明都是定义:

  • int b它既是声明,同时又是定义
  • 对于extern b来讲它只是声明不是定义

一般的情况下,把建立存储空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”。

浮点型变量

浮点型分为单精度型(float)和双精度型(double)两种

  • float型数据占用4个字节(32bits)存储单元,提供的有效数字是6~7位
  • double型数据占用8个字节(64bits)存储单元,提供的有效数字是15~16位

    数值类型

    singned是有符号数
    short是短整型,一般是int一半大小,在32位的windows下是2个字节
    Long是长整型,在windows是4个字节,在32位linux是4字节,在64位linux下是8字节
    Long long是长长整形,longlong在32位系统和64位系统下都是8个字节
    unsigned int, unsigned short, unsigned long,
    unsigned int b=100u;
    long long e =100ll;
    unsigned long f =100ul;
    
    在c语言中表达一个整数的常量,如果什么标识都不加,那么默认类型是singed int

    整数的溢出

    当超过一个整型能够存放最大的范围时,整数会溢出,溢出有符号位溢出和最高位溢出的区别,符号位溢出会导致正负数发生变化,最高位溢出导致最高位丢失

    char类型

    ‘’引起来的就是char的常量
    ‘a’就是char类型的常量
    “a”就是一个字符串类型的常量
    char在内存中占用了一个字节,c语言中没有byte类型的数据,但可以用char来代替
    unsigned char a;//定义了一个无符号的byte类型
    char能有多大?-128到127之间, unsigned char范围是0到255之间

    类型限定

    register
    把变量放在寄存器里面会提高效率
    register int b=0; //这个变量在寄存器里面,不在内存里面
    
    register是建议指令不是命令型指令,如果cpu有空闲寄存器就生效,如果没有就无效

volatile
代表定义一个变量,这个变量值可能在cpu指令外被改变

volatile int a; //定义一个volatile类型的int变量

通过volatile定义的变量,编译器不会去优化这个变量相关的代码


const
定义个常量

字符串

字符串是内存中一段连续的char空间,以^\0^结尾
‘a’在内存中是一个字符a
“a”在内存中是2个字符,第一个是’a’,第二个是’\0’
“helloworld”在内存中是 ‘h’ ‘e’ … ‘d’ ‘\0’

scanf函数与getchar函数

getchar是从标准输入设备中读取一个char
char a=getchar(); //从标准输入设备中读取一个char,赋值给a,是acsii码值
scanf通过%d转义的方式可以得到用户通过标准输入设备输入的整数
scanf("%d",&a); //这里一定要写取地址操作符

image.png