系统学习之C复习(1)

数据类型

sizeof()  单位是字节 byte
    
计算机中的单位:
    bit - 比特位 最小单位 - 存放一个二进制
    byt - 字节 = 8bit
    kb  - 1024 byte
    mb  - gb -tb - pb

为什么整形 int 与长整形 long 都是4字节  
    C语言标准: sizeof(long) >= sizeof(int)

2022/11/18

常量

1.字面常量 
    3.14,10 等等
2. const  修饰的为常变量
    const 修饰后的常变量不可改变属性,例如:
        const int a = 10;
        a =  20;  //error 此时编译,a 会进行报错。
    常 但依旧是变量
        int n = 10;
        int arr[n] = {0}; // 不行,n为变量
        const int n = 10;
        int arr[n] = {0}; // 不行,n为常 但依旧是变量
3. define 定义的常量
    define 不是关键词,是编译器实现的,用来定义宏的预处理指令
4. 枚举变量:用于可以 一一列举 的例子 
    关键词: enum    使用:
    enum name
    {
        a,
        b,
        c,
    }
    enum name X = a;

字符串与转义字符
字符串
    “字符串的”结束标志是一个“ \0 ” 的转义字符,且 \0 不算字符串内容
    字符数组:一组相同类型的元数
    如: char arr[] = "hello"; //[]内不赋值,系统自动赋值 
        此处 arr[]内的[] 为6    ,第六个为 \0 
        
        char arr1[] = "abc";         //arr1[4]
        char arr2[] = {'a','b','c'}; //arr2[3] ,无 \0
                arr2在此处添加一个'\0' ,则与arr1输出相同
        /*
        #include <string.h>
        strlen(arr1) ——> 求长度的函数 ——>输出 3 ,
        可知 “ \0 ” 不计入字符串长度            
        strlen(arr2) ——> 输出随机值,因为无结束符
        
        sizeof(arr1) ——> 会计算 \0
        */
    字符串之间比较,不能使用 ==  。
    应该使用 strcmp(字符串1,字符串2)
        相等,返回0;
        字符串1 < 字符串2    返回<0
        字符串1 > 字符串2     返回>0
转义符
注意:
    printf("%s\n", " \\ \"");  //输出 \" 此处的 \\ 转义了转义
    好玩的:\a 警告字符,蜂鸣
    重要的:\ddd 打印ASCII 
                ddd表示 1~3 个八进制的数字 如 \130 输出 X
            \xdd 
                dd表示2个十六进制数字 如:\x30 输出 0
                
面试题 //程序输出什么
    printf("%d\n","c:\test\328\test.c"));    //12
        // 八进制中不存在8。 存在的转义 \t \32 \t
    printf("%s\n", "c:\test\328\test.c");    
            
    
注释
 // C++的注释
 /**/ C的注释   C注释不支持嵌套注释
 

操作符
    位移操作符:》《 移动的是二进制位
        int a = 2;            //a : 0010;
        int b = a<<1;        //b : 0100;
        printf("%d\n",b);    //b : 4
    位操作符:&    按位与 |按位或 ^按位异或

    sizeof 是操作符!
    
    按位取反 
        int a = 0;// int 4位,32个bit
        //0按位取反后为 32个1,但是最高位1是负数。
        printf("%d\n",~a); //输出 -1
        原码取反+1 得到补码        正数:原码补码反码 相同
        负数 : -1 :
        10000000 00000000 00000000 00000001 (原码)
        11111111 11111111 11111111 11111110 (反码)
        11111111 11111111 11111111 11111111 (补码)
    
    类型(强制转换)
        int a = (int)3.14;    ——不推荐
    
    条件操作符    exp1?exp2:exp3
        exp1 成立,exp2计算,整个表达式的结果是 exp2的结果
        exp1 不成立,exp3计算,整个表达式的结果是 exp3的结果
        max  = a>b?a:b;
    

常见关键字
    1. C语言提供的,不可自己创造的
    2. 关键字不能作为变量名字
    register int num = 100;//建议放在寄存器中
    //register 大量频繁使用的数据,可以放在寄存器中,提升效率
关键关键字
    typedef 类型重定义
        typedef unsigned int u_int;
    static - 静态的
        1. static 修饰局部变量
        2. static 修饰全局变量
        3. static 修饰函数
    
        1. void test_1()        void test_2()
        {                                {
            int a = 1;                 static int a = 1;
            a++;                         a++;
            printf("%d ",a);    printf("%d ",a);
        }                                }
        test_1 输出全是2     test_2 输出 2~11
            static 修饰局部变量,使 a 不销毁,改变了变量的生命周期
            本质是: 改变了变量的存储类型        
    
    栈区:存储局部变量、函数的参数
    堆区:动态内存分配的
    静态区:存放全局变量和 static 修饰的静态变量
        
        2. static 修饰的全局变量限制在自己所在的源文件内可以使用
            全局变量,在其他源文件内部可以被使用,是因为全局变量具有
            外部连接属性,但是被 static 修饰后则变成了内部连接属性。
        
        3. static 修饰函数 与 修饰全局变量 相似
        
    #define 定义常量和宏
        define 预处理, 本质是替换。  
        #define ADD(X+Y) X+Y
        printf("%d\n", 4*ADD(2,3)); //输出 11 并非20. 
        //若需要输出为20  则需要如此修改 #define ADD(X+Y) ((X)+(Y))
        

2022/11/19
指针  ——  就是  地址
    思考:1.内存如何编号?2.一个这样的内存单元多大空间
    1.    32位 - 32跟地址线 - 物理线 - 1/0
        电信号转换成数字信息:1和0组成的二进制序列  
    ————32跟地址线上产生的所有二进制可能性,任意一个而金子则为内存编号
    2.    2^32次方个内存单元 - 每个内存单元的大小是1个字节(Byte)
    
    %p 打印地址 int* pa = &a; //pa是用来存放地址的,在C语言中,pa叫指针变量
        //  *   说明 pa 是指针变量
        //  int 说明 pa 执行的对象是 int 类型
                *pa = 20; // *解引用操作  *pa通过pa里面的地址,找到a  
    指针变量大小
        指针大小相同。
    
结构体
    让C语言创建出新的类型:例如创建一个学生类型
        struct Stu
        {
            char name[20];    //成员变量
            int age;
            double score;
        };
        struct Stu s = {"张三",20,85.5}; //结构体的创建和初始化
        printf("1:%s %d %lf\n",s.name,s.age,s.socre);    //结构体变量.成员变量
        
        struct Stu * ps = &s;             //测试
        printf("2:%s %d %lf\n",(*ps).name,(*ps).age,(*ps).socre);
        printf("3:%s %d %lf\n",ps->name,ps->age,ps->socre);//    结构体指针->成员变量名 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值