干货干货,这期是满满的干货

1 C语言简介
    1)发展历程:BCPL -> newB -> C ->UNIX -> Minix -> Linux -> gcc
    2)C语言诞生于1970-1973年,在肯.汤姆逊和丹尼斯.里奇的编写下完成,归属于美国贝尔实验室
    3)C语言是专门为了编写操作系统而诞生的语言,因此天生适合硬件编程,以运行速度快而著称,也非常适合实现数据结构与算法
    4)由于C语言出现时间过早,C语言存在非常多的缺陷,发明时没想到普通人也能使用C语言编程,因此陷阱一直存在,但是前辈们总结了一些避免陷阱的经验《C语言的陷阱与缺陷》《C程序设计语言》
    5)C语言的语法特点很自由,自由也意味着危险,自由源于自律
    6)C语言的语法标准:
                    C89语法标准:gcc默认的语法标准
                    C99语法标准:对C89标准的扩展和增强  gcc -std=gun99
                    C11语法标准:全新的升级

一、第一个C程序

   

 #include <stdio.h>
    int main()
    {
        printf("helloworld!/n");
        return 0;
    }

        程序员所编写的代码并不是标准的C语言代码,需要一段程序把他翻译成标准的C语言代码,负责翻译的程序叫做预处理器,翻译的过程叫做预处理,被翻译的代码叫做预处理指令,以#开头的代码都是预处理指令
        #include  的功能是把一个头文件导入到当前的文件中
        #include <>   尖括号会从系统指定的路径下加载头文件
        #include ""   双引号会先从当前路径下加载头文件,如果找不到,再从系统指定的路径下加载头文件
        操作系统是通过设置环境变量来制定加载头文件的路径
        stdio.h 负责对输入输出功能的函数进行说明    
                    头文件:以.h结尾,里面存储的是一些辅助性的代码,绝大部分是函数的声明
                    源文件:以.c结尾,里面存储的是具有功能性的代码
                    C语言标准委员会为C语言以函数形式提了一些基础功能,这些函数就被封装到了libc.so库中
                    用很多头文件负责对库中的函数进行分类说明,stdio.h就是其中的一个,常用的还有stdlib.h  string.h
        main函数:
                C语言函数定义:C语言里以函数为单位来管理代码,函数是管理代码的最小单位,一个函数就是一段具有某项功能的代码段
                main函数是程序的执行入口,有且只有一个
        int     是一种数据类型,他表示main函数的执行结果,是一个整体
        return  功能有两个
                        1)结束函数的执行
                        2)返回一个数据给函数的调用者
        main函数是由操作系统调用,他的返回值给操作系统的反映程序是怎样结束的,通常有三种情况
                正数:   表示出现异常   (别人的错误)
                0:      表示一切正常
                负数:   表示出现错误   (自己的错误)
            可以通过 echo $?  命令查看上一个程序的返回值
        printf/scanf  是标准库中的函数,负责输入、输出数据,用来调试代码
        转义字符:
                键盘上一些按键是没有符号的,用一些特殊的字符组合来表示,这些特殊的字符组合就是转义字符,\n就是其中的一个
                \n  换行
                \b  退一个字符
                \r  回到行首
                \t  制表符,用于对其数据
                \a  响铃
                \\  表示一个\
                %%  表示一个%
        C语言里以分好作为一行代码的结束,使用大括号划分代码区域

二、编译器
    1 作用:负责把人能看的懂得记录了代码的文本文件,翻译成计算机能看的懂得二进制文件,由预处理器、编译器,连接器
            gcc是由GNU组织为了编译Linux内核代码而开发的一款免费的、开源的编译器,默认采用C89标准,-std=gun99可以设置语法标准
    2 常用的参数:
                -E:显示预处理的结果
                -c:只编译不链接
                -o:设置编译结果名字
                -I:指定头文件的加载路径
                -S:生成汇编代码
                -l:指定要使用的库文件
                -Wall:以更严格的标准来检查代码,尽可能多的显示警告
                -Werror:把警告当错误处理

三、C代码变成可执行程序的过程
    1 进行预处理:把源文件翻译成预处理文件
                    gcc -E name.c   直接显示预处理文件的结果,但是不生成文件
                    gcc -E name.c -o name.i   生成以 .i 结尾的预处理文件
    2 编译:把预处理文件翻译成汇编文件
                    gcc -S name.i   生成以 .s 结尾的汇编文件
    3 汇编:把汇编文件翻译成二进制的目标文件
                    gcc -c name.s   生成以 .o 结尾的目标文件
    4 链接:把若干个目标文件合并成一个可执行文件
                    gcc a.o b.o c.o ... 默认生成一个 a.out 的可执行文件
    (注:第2第3步可能名字会变,但处理过程一定固定)

四、C语言的文件类型
    .h  头文件
                .h.gch 头文件的编译结果,如果有,他会被优先使用
    .c  源文件
    .i  预处理文件
    .s  汇编文件
    .o  目标文件
    .a  静态库文件
    .so 共享库文件

五、数据类型
    为什么要对数据进行分类:
        1 现实社会中的数据就是自带类别属性的
        2 对数据进行分类可以节约存储空间,提高运行效率


    存储空间的单位:
                Bit(比特)  一个比特存一个二进制位,只能存储0或1,计算机存储数据的最小单位
                Byte(字节)   一个字节存八个二进制位,计算机存储数据的基本单位
                Kb          1Kb=1024字节
                Mb          1Mb=1024Kb
                Gb          1Gb=1024Mb
                Tb          1Tb=1024Gb
                Pb          1Pb=1024Tb
    C语言的数据分类:
                自建:程序员自己设计的:如:结构、联合、类
                内建:由C语言自带的:
                    (注意:可以使用sizeof运算符计算类型的字节数)
                                    整型:
                                        有符号:signed
*                                                       int8_t  signed char           1个字节           -128~127
*                                                       int16_t signed short          2个字节           -32768~32767
*                                                       int32_t signed int            4个字节           正负20亿
                                                                signed long           4/8个字节         
                                                        int64_t signed long long      8个字节           正负9开头19位整数
                                                        (signed不加代表加)                                   (从上到下占用字节数从小到大)
                                        无符号:unsigned
*                                                       uint8_t  unsigned char         1个字节           0~255
*                                                       uint16_t unsigned short        2个字节           0~65535
*                                                       uint32_t unsigned int          4个字节           0~40亿
                                                                 unsigned long         4/8个字节         
                                                        uint64_t unsigned long long    8个字节           0~以1开头的20位整数
                                            注意:由于定义无符号数据时比较麻烦,标准库把这些无符号的类型重新定义成一下类型:(使用时需要包含头文件:stdint.h )
                                                    int8_t   int16_t   int32_t   int64_t
                                                    uint8_t  uint16_t  uint32_t  uint64_t
                                    浮点型:
*                                           float        4个字节数
*                                           double       8个字节数
                                            long double  12/16字节数
                                            (浮点型数据都是采用科学计算法,二进制与真实数据之间需要进行换算,因此浮点型数据耗时要比整型数据多得多,编程时尽量选择整型,一般默认小数点后六位有效)
                                            time ./a.out 计算程序运行时间
                                    模拟型:
                                            字符型模拟 char 字符其实就是符号或图案,内存中存储的是整数,当需要显示成字符时会根据ASCII码表中对应的关系显示出相应的符号或图案
                                                            '\0'(空字符):对应的整数值是0
                                                            '0' (字符0):对应的整数值是48
                                                            'A' (字符A):对应的整数值是65
                                                            'a' (字符a):对应的整数值是97
                                            布尔型模拟 bool  先有C语言之后才有了bool类型,所以C语言中是不可能有真正的布尔类型,在C语言中使用需使用头文件 stdbool.h 对布尔类型进行模拟
                                                        bool true  false
六、变量与常量
    1 变量
        1)定义:程序在运行期间数据可以变化的叫做变量,相当于存储数据的盒子
        2)使用方法:
                (1)类型 变量名;
        3)取名规则:
                (1)由字母、数字、下划线组成
                (2)不能以数字开头
                (3)不能与C语言32个关键字重名
                (4)见名知意(功能、类型、范围...)
        4)使用:
                赋值:    num = 100;
                参与运算:num * 10;
                注意:在C语言中,变量的默认值是随机的,随机意味着不稳定,为了安全起见要进行初始化,一般初始化为0
        5)变量的输入、输出:
                (1)输出:printf
                        int printf(const char *format, ...);
                        功能:输出数据
                        format:"双引号包含格式信息(提示信息+占位符)"
                        ... :可变参数,专门用于存放变量列表
                        返回值:输出字符的个数

                        类型占位符:C语言中通过类型占位符的方式来传递变量的类型
                        %hhd  %hd  %d  %ld  %lld        有符号
                        %hhu  %hu  %u  %lu  %llu        无符号
                        %f    %lf  %LF
                        %C

                        练习1:定义各种类型的变量并初始化,使用printf来显示
                        int num_i = 0;
                        printf("num=%d %d\n",num_i,num_i);

                (2)输入:scanf
                        int scanf(const char *format, ...);
                        功能:输入数据
                        format:"双引号包含格式信息(占位符)"
                        ... :变量地址列表
                        返回值:成功输入的变量个数
                        注意:scanf需要的是变量类型、变量地址
                                变量地址 = &变量名

                        练习2:定义各种类型的变量并初始化,使用scanf输入并使用printfj *输出
                            int num_i = 0;
                            printf("请输入num_i的值:");
                            scanf("%d",&num_i);
                            printf("num_i = %d\n",num_i);
    2 常量
        1)定义:程序运行期间数值不能变化的叫常量
                100 默认 int   100l  long    100U  默认 unsigned int    100lu  unsigned long    3.14 默认 double     3.14f float

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值