• C学习笔记-数据类型


    常量

    在程序中不可变化的量,也就不可赋值
    常用两种定义方式,#defineconst
    另外还有一个字符串常量

    define

    #define MAX 100
    

    #define在预编译的时候,其实也是做的简单文本替换

    可以通过gcc -E test test.c进行验证

    注:使用define定义时候叫做宏定义,其原理类似于include,其后没有双引号

    const

    const定义一个变量,一旦定义以后就不可以修改。故const定义的变量在一开始就要赋值,不然在使用的时候就会发生意外,取到的是原内存地址的值,为不确定值。

    const int a = 10;
    

    字符串常量

    在C语言当中""引用的字符串叫做字符串常量,一旦定义亦不可以被修改的
    其形式为"test"
    其实质是使用null字符’’终止的一维数组,在内存中实际占用的地址位会多一位,即为’’占用的地址
    由于C语言中没有专门定义字符串常量的关键字,故一般是用char数组定义字符串。

    char string[6] = {'t', 'e', 's', 't', ''};
    //等价于
    char string[] = "test";
    

    注:以上实质为数组,可修改但实际并不是修改字符串的值
    字符串有很多常用的函数,现简单的列出几个常用的字符串操作函数:

    函数 功能
    strcpy(s1, s2); 复制字符串 s2 到字符串 s1
    strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾
    strlen(s1); 返回字符串 s1 的长度
    strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0
    strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置
    strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置

    sizeof关键字与size_t

    sizeof是一个关键字,而不是一个函数。

    sizeof返回的是一个大于0的整数,表示数据类型在计算机内存中占用的空间,单位是字节

    为了表示sizeof的返回值,使用size_t表示sizeof的返回值。即为无符号整形。一般情况下等价于就是unsigned int

    sizeof(int);
    sizeof(char);
    

    int类型

    int变量

    int是整型

    int类型占据内存的大小为4个字节

    16位系统下:2个字节
    32和64位系统下:4个字节

    int a; //代表在内存中开辟一个大小为4字节的存储空间
    a = 1; //代表在开辟的空间里存储的数据是10这个常量
    

    补充知识:
    小端对齐和大端对齐
    小端对齐:高地址放高位,底地址放低位
    大端对齐:高地址放低位,底地址放高位
    对于大型Unix CPU都是按照大端对齐方式处理int,但对于x86构架CPU,还有ARM,是小端对齐的

    printf输出int的值

    int a = 10;
    printf("%d",a); //%d的意思是按照10进制打印一个整数
    

    %d:按照10进制打印一个整数
    %o:按照8进制打印一个整数
    %x与%X:按照16进制打印一个整数(区分大小写打印)

    short, long, long long, unsigned int

    • 在32位操作系统下:
      short:2个字节
      long:4个字节
      long long:8个字节
    • 在64位操作系统下
      int:4个字节
      long 在大多数64位系统下8个字节
    • 无符号短整数:unsigned short
    • 无符号整数:unsigned int
    • 无符号的长整数:unsigned long
    • long结尾一般添加l或者L以示区分(和int区分)e.g.:
      9l,9L,9ll,9LL,9u,9ull,9ULL

    整数溢出

    当把一个大的整数赋值给小的整数,叫整数溢出
    此时会导致高位被抛弃,截断的数据赋值给小的整数

    char类型

    char变量

    char是字符型
    char占据一个字节的内存
    char -128~+127(7F)
    unsigned char 0~255(FF)
    char就是一个字节(BYTE)
    如果将char当作一个整数输出的话,就是该字符的ASCII码
    ASCII

    printf输出char

    %c 代表输出一个字符

    常见转义字符

    转义字符 意义
    a 警报
     退格
    换行
    回车
    制表符
    斜杠
    单引号
    双引号
    ? 问号

    浮点数

    浮点数变量

    浮点数所占字节和计算机密切相关
    float:单精度浮点数
    double:双精度浮点数
    long double
    float表示的数,一般结尾加f或者F,以示区分(和double区分)

    printf输出浮点数

    %f或者%Lf

    基本类型小结

    浮点数赋值给整数,小数位会舍弃。
    整数赋值给浮点数,会增加小数位,全部用0填充

    类型 描述
    char 通常是一个字节(八位)。这是一个整数类型。
    int 对机器而言,整数的最自然的大小。
    float 单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。float
    double 双精度浮点值。双精度是1位符号,11位指数,52位小数。double
    void 表示类型的缺失。

    类型限定

    • const
      const限定一个变量的值不可以改变
    const int ci = 10;
    
    • volatile
      告诉编译器不要优化代码,只要是volatile类型变量,每一步都需要从内存当中读取
      一般在传感器的使用中比较常见
    volatile int vi = 10;
    
    • register
      告诉编译器这个变量使用寄存器,提高效率,register只是一个建议,而不是必须的结果
    register int ri = 10;
    

    类型转换

    • 隐式转换
    double d = 10.5;
    int a = d;
    
    • 显示转换(强制转换)
    int a = 5;
    int b = 2;
    double d = (double)a / (double)b;
    
  • 相关阅读:
    Mybatis问题记录-狂神版
    Uni-App开发记录
    某笔试题目--修复回文
    人生就是一个苏醒的过程
    今天早上进入你的空间突然发现咱们以前的东西都不见了,点开你的情侣空间.....
    青春物语
    中小学、幼儿园教师资格认定
    换屏
    oracle 语句
    Packet for query is too large (1057 > 1024)解决
  • 原文地址:https://www.cnblogs.com/cj5785/p/10664817.html
Copyright © 2020-2023  润新知