C基础知识总结

一  C语言中,关于对数的设计类型:
数据类型:   即 对 不同类型的数 的 表示 和 存储 
    整数类型  精确类型 
    char   字符型    8bit   1字节  存储这个数   0-255  共256个数
    short  半字类型  16bit  2字节               0-2^16-1 = 65535
    int    整型      32bit  4字节               0-2^32-1 = 4,294,967,295
    long   长整型    64bit  8字节               0-2^64-1 = 

int  与 long 存储大小   
    一些8位单片机 51   int 2字节  long  4字节 
    一些32位单片机  stm32 或 LinuxC   int 4字节  long 8字节 

    signed         有符号类型    不写默认是有符号类型 
    unsigned     无符号类型

    signed    char  有符号字符型   -128 ~ + 127
定义使用数据类型时要确定是否会产生溢出 列如 -128到+127这个范围内,若此时+127的二进制码再加一
则与-128的二进制码相同 :127=0b111 1111     -128=1000 0000
    unsighed  char  无符号字符型 

有符号与无符号的区别 
    负数如何表示   -2 -10  -1 
    
    有符号数  最高bit 作为符号位  0 正数 1 负数 
    signed    char   -128 ~ 0  ~ +127
    补码形式 存储有符号类型  
    
    LinuxC中:
        不写 signed  默认 都是有符号   gcc  
    单片机C中   arm gcc     
        char 不写  默认无符号类型 
        除char类型 外  其他不写signed  默认是有符号类型 
    
    有符号
最高位 为 符号位   其余位 存储值  若值是负数  补码 
负数值 = 补码取反 +1 

强类型语言: 
    C语言:  任何变量或存储空间 必要先定义(给定类型 ) 然后才能使用 
        且 使用过程中 类型不不能更改 
弱类型语言python
定义的初始变量不等于结束变量
小数:  2.5  0.71231   0.0000000000000012   21873541623584713527412348234.12341341
非精确类型:  数据 有 有效位数 超过有效位数的数据丢弃 
浮点类型存储与表示: 
    使用幂指数方式存储小数
    0.25 * 10^-1 
    0.71231 * 10^0
    0.12 * 10^-14
    0.21873541 * 10^29

浮点数存储:
    flaot  单精度浮点型   4字节存储    有效十进制位数 约6位
    最高bit 符号位   8bit 幂指数位  23 位有效位 
    
    double 双精度浮点型   8字节存储    有效十进制位数 约15位 
    最高bit 符号位   11bit 幂指数位  52 位有效位 

逻辑上: 
    布尔类型 bool  真  假
C语言中  真  非0 为真    0假 

void 类型  空类型  

C语言中的常量 
常量: 程序运行过程中 始终不变的量 
    
    整型常量:  5  10 -5 整数值  8   
    浮点常量:  2.5 -3.7 
    指数常量:  3.0e-26  => 3*10^-26
    字符常量:  单个英文字符  'a' '8' === 56 ASCII
    字符串常量:  多个字符放在一起  "hello world"  
                在内存中 存储的是 字符的 编码 连续存储
    标识常量(宏定义):  本质是给 常量  定义一个字符串形式的 别名 
        #define 宏名  值 
        #define PI  3.14
        #define WATER   3.0e-26  
        

变量: 程序运行过程中 可能改变的量 
    其本质 即 给一个 内存空间 命名   通过该名字访问内存 
    C语言中 的 变量 
1. 先定义再使用   2. 定义时给定类型 一旦定义完成 其类型将不能改变 
示例 变量的定义:
    存储类型  数据类型   变量名;
                      auto         int        a;  // 即表示 声明一段4字节内存空间  命名为 a 
    若省略存储类型 即 auto 类型   auto类型可以不写,不写的可以默认为auto型

存储类型:  决定了 变量存储的位置  
            存储相关的关键字      auto  const   extern   register   static 


    二    C语言内存结构: 
             常量     
    1.代码段:  存储代码 即编译的二进制指令   只读 (属性)
    2.常量区:  存储程序中的 常量  ""  (""双引号扩起来的部分) 常量字符串   只读 
         可以使用 const 关键字  修饰全局变量  将该变量的存储位置 变更为常量区 
                                                        关键字const         全局变量------>常量

变量:    
    3.静态区:  可读可写   只能被初始化 一次  在程序开始运行时  
            该区域变量 将从程序开始 一直存在到程序结束
            未初始化的 静态区变量  都默认初始化为0
    4.堆区:    有程序员 在程序运行时 可以手动 动态(长度不确定)申请或释放的 内存  
    5.栈区:    有程序运行时 自动(函数形参或局部变量) 申请或释放的 内存 
            未初始化的栈区变量  其初始值不确定 
                            堆区和栈区的区别在于  一个手动 一个自动申请或释放数据    堆区和栈区是作用于内存的
        
三由系统维护的数据:
    6.系统区:  LinuxC有, 存储操作系统对于该进程的 一些数据  
    进程控制块,内存占用情况, 环境变量等        只读  

全局变量: 变量定义的位置 在函数外(不在任何函数内 {}) 可以在整个程序中使用     
局部变量: 变量定义的位置 在函数内( 在 {}  中定义的) 只能在{}内部使用 

    auto     修饰全局变量   该变量存储于静态区  可读可写
    auto     修饰局部变量   该变量存储于栈区       
    const    修饰全局变量   该变量存储于常量区     特殊情况的变量 --->可以存储在常量区
    
    static     修饰局部变量   该变量存储于静态区     可读 可写
            只能在{}内使用    只能被初始化 一次  在程序开始运行时
    static    修饰全局变量   该变量存储与 静态区    可读可写
            只能在当前C文件中使用  只能被初始化 一次  在程序开始运行时 
            多用于防止全局变量重名 导致的问题
            
    static  修饰函数   该函数只能在 本文件内使用         一个程序包含多个文件即 一个程序可能由多个文件组成

变量赋值    变量名  =  值; 即 向内存中 写入值 
变量初始化  即  定义时 赋值 ;

    extern  修饰全局变量  表示外部 引入 存储类型  不开辟新的内存 空间 
                    是一种声明 
    extern  函数          表示引入外部文件实现的 函数        

    register   寄存器类型 声明   表示变量 尽量使用寄存器存储 
            通常用于修饰 在一段代码中 使用极其频繁的 量  
            该存储类型的变量 不能取地址 &

变量名: 由编程者 自己定义的名字 
    程序中  变量名  函数名  宏名   都是 标识符 
    命名规范: 
        1. 只能由 字母 数字 下划线 组成  区分大小写 
        2. 不能由数字开头  
        3. 不能与 关键字重名   32个

int 张3;  int  7a;   int char;   不行
int _abc;   int printf;   可以   printf可以定义但是不一定可以使用,和输出重名

库标识符:  库中 有对于该标识的定义  
系统标识符:  由编译定义了的  include 

数据类型的转换:   将类型不匹配 的数据 转换为 对应匹配类型的数据格式 
    隐式类型转换: 有编译器  自动完成  一些默认转换模式 
    强制类型转换: 编程者 手动进行的 强制性的类型 转换 
        变量 或 值  前  使用(目标类型)

类型的转换过程: 
    float --->  int    舍弃小数   取整操作 
    int   --->  float  整型(精确类型)  小数(非精确类型) 精度会丢失   int的精度会更高一点
    
    int   --->  char   溢出部分舍弃   宽存储空间 转换为  小存储空间 
    int   --->  short   
                        小存储空间 转换为    宽存储空间   不影响 

    整型与浮点型 参与运算时   隐式类型转换 会统一转换为浮点型计算  列如:int a=2; float b=3.00  a+b=5.00000


    
    有符号数  无符号数  强制类型转换时  存储内容 完全没有改变  但影响计算 
    
C语言中标准输入与输出:
    标准输入: 程序终端 输入的内容 
    标准输出: 程序输出 到终端显示 
    
输出:   使用man  函数名  查询该函数 
    putc();    输出一个字符  'a'
    putchar();  与putc一样  输出一个字符
    puts();    输出一个字符串  "hello world"

    
    sprintf/snprintf 即格式化后 输出到 指定内存容器str中

返回值:  成功 返回 格式化后输出的字符个数 

... 变长参数个数 
        getchar()用于吸收产生的空格键
    使用:  format 格式控制字符串 "a=%d\n",a  其中 a=\n  原样输出 
                    %d  格式占位控制符

        %d  输出整型有符号数  以10进制方式显示 
        %x  输出整型无符号数  以16进制方式显示 
        %u  输出整型无符号数  以10进制方式显示
        %c  输出一个 字符型数 以字符方式显示
        %s  输出一个字符串    以\0 作为结束符 
        %f  输出一个浮点类型  以10进制方式 
        
        %%  输出%本身

        附加格式说明符(修饰符):
        %8d  输出整型有符号数  以10进制方式显示
                在数据值宽度低于8个字符位置时  填充空格维持8个字符位置 
                -8  向左对齐 
                8   默认右对齐
        %.2f  输出一个浮点类型  以10进制方式  保留2位小数   四舍五入

        %ld  输出整型有符号数 宽度为8字节long 以10进制方式显示
        %lf  输出 double 类型的浮点数 
练习:   代码名字整数和小数
若有定义 float f = 2.5690;
    请输出 f=整数部分,.f=小数部分 保留2位小数 
    示例: f=2,.f=0.57

标准输入:
    #include <stdio.h>

       int fgetc(FILE *stream);  //得到一个字符
       int getc(FILE *stream); //得到一个字符
       int getchar(void); //得到一个字符
   
    char *fgets(char *s, int size, FILE *stream);  //得到一行输入
    s: 存放输入字符串的容器  char buf[20];
    size:  容器的大小 单位字节 
    stream:  stdin 
scanf: 格式化输入 
       int scanf(const char *format, ...);
       int sscanf(const char *str, const char *format, ...);
            sscanf 从str内存中 按格式提取

    格式控制字符串:  非常类似于printf 
                %d 表示 输入提取为一个整型数 
                %f 表示 输入提取为一个小数数 
                %4d 表示 输入提取为一个整型数 宽度为4个数字 
                %4c 表示 输入提取4个字符 组成字符串
                
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值