• C语言笔记(进行中)!!!


    入门:解释与编译的区别:解释性语言运行的时候需要解释器(比如Java需要JVM解释器,Python需要Python解释器),而编译性语言可以直接机器码。
        黑黑的框:-->终端、命令行、控制台。./
        程序框架都要有**;结束都要有分号;有些地方换行和空格不影响程序;不要用中文全角,中文输入法;
    1.void 在英文中作为名词解释为“空虚,空间,空隙”,而在C语言中,void被翻译为“无类型”,相应的void*为“无类型指针”。
    2.#include(包括):编译预处理命令一般地,在C语言或C++中,会把用来#include的文件的扩展名叫 .h,称其为头文件。
    3.stdio 就是指 “standard input & output"(标准输入输出)
    所以,源代码中如用到标准输入输出函数时,就要包含这个头文件!
    注意:// 单行注释                 /* 
                         多行注释
                          多行注释
                          多行注释
                         */
    4.数据基本类型:
        算术类型,包括两种类型:
            整数类型:字符型char(1个字节),短整型short (2),长整型long(>=4),基本整型int(4),双长整型long long(8),布尔型bool(1)
            注意:1.bool是布尔型变量,也就是逻辑型变量的定义符,类似于float,double等,只不过float定义浮点型,double定义双精度浮点型。 
            2.布尔型变量的值只有 真 (true) 和假 (false)。3.最好别用bool,bool变量可用int代替。
            浮点类型:单精度浮点型float(4),双精度浮点型double(8),多精度浮点类型long double(8)------详见配图
        枚举类型,(enum):1.取值:默认从零开始,以此递增1,也可以自定义数值。2。枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。
        (不熟)         枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0.
                    例如:
                        enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };
                优点:1.增加代码可读性和可维护性
                          2.和define定义的标识符相比,枚举有类型检查更加严谨
                          3.防止了命名污染(封装)
                          4.便于调试,define不便于调试,调试时是已替代的内容
                          5.使用方便,1次可以定义多个常量
        整型进制:1,默认为10进制 ,10 ,20
             2,以0开头为8进制,045,021
             3.,以0b开头为2进制,0b11101101
             4,以0x开头为16进制,0x21458adf
        其他类型:1.指针类型:char*、int*、void*......(char*不一定指的是字符串)
            2.数组类型:int ar[]
            3.机构体类型:成员:可以是标量、数组、指针、甚其他结构体,通过点操作符(.)访问
            (不熟)        一般形式如下:

                    struct<结构体名><结构体变量名>;

                    eg:struct student student1,student2;

                    关键字struct要与结构体名student一起使用,共同构成结构体类型名。
                     内存对齐:1.自身类型有一个对齐值
                         2.自定义类型有个对其值(内部成员最大的那个)
                         3.程序有个指定的对齐值
                         4.程序有个有效的对齐值     注:后面后又了解!
                      对齐原因:1.平台原因(移植原因)
                           2.性能原因:对齐的内存访问仅需一次
                      位段(位域)1.节省空间,但不能跨字节储存
                              2.不能跨类型储存     *超出的高位会被丢弃
                      结构体传参1.传值传参
                          2.传址传参(相较于前者更好一点,省去了开辟更大的空间)
                      联合体(union)1.按照内部最大的成员大小定义空间(应保证至少有能力保存最大的那个成员)
                              2.当最大成员大小不是最大对其数的整数倍时,要对齐到最大对其值的整数倍
                        3.可用于判断大小端、表示点分十进制
                      函数类型:void fun()
    4.运算符(要注意优先级)1.算术运算符:(+ - * / %(取余) ++ --)
                  2.关系运算符:(> < = >= <= !=)
                  3.逻辑运算符:(!(假) &&(和) ||(或))
                  4.赋值运算符:(= += -= *= /= %=)
                  5.位运算符:(<<(远小于) 、>>(远大于)、 ~(一种单目操作符,即对一个数的二进制按位取反)、 |(有1为1,全0为0)、 
                  ^(其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1)、 &)(地址)
                  6.条件运算符:(? :)三目操作符    例子:<表达式1>?<表达式2>:<表达式3>;
                  返回值:先求表达式 1 的值,如果为真,则执行表达式 2,并返回表达式 2 的结果;如果表达式 1 的值为假,则执行表达式 3,并返回表达式 3 的结果
                  7.逗号运算符:(,)操作数从左向右一次执行,最终结果为逗号最右边的值。(比较基本)
                  8.指针运算符:(* &)不能对空指针进行解引用 ++ --操作
    5.语句1.分支语句:1.if语句:else与之最近的if相匹配
                             2.switch语句:每一个case后的break语句不可省;最后一个分支default语句不可省,每个case具有一个唯一值;
                        switch(整型表达式){case:整型常量表达式...}
                             3.goto语言:在需要跳转的语句前加标签,尽量避免使用( 语句用于在一个程序中转到程序内标签指定的位置,标签实际上由标识符加上冒号构成)
             2.自由主题:1.for循环语句:注意边界问题、控制变量尽量采用“半开半闭区间”不可在循环体内部修改变量
                    2.while循环语句:嵌套循环,只跳出内层循环
                    3.do while 循环语句:与while语言相同,但先执行一次在进行循环
    6.数组1.一维数组:数组名表示数组首元素地址,当数组名作为sizeof或&的操作数时,数组名表示整个数组
             2.二维数组:相当于一维数组,区别在于其第一维元素其实是一个数组,数组名表示整个数组,当数组名作为sizeof或&的操作数时,数组名表示数组的第一行。
             3.指针数组:int*arr[](整型指针数组) char*arr[](字符型指针数组)
             4.函数指针数组:int (*p[5])(int,int)p先和[]结合,数组内容是int(*)(int,int)的函数指针
             5.柔性数组:特点:1.结构体中柔性数组成员前必须至少一个其他成员;
                  2.sizeof返回这种结构的大小不包括柔性数组的内存;
                  3.包括柔性数组的结构用malloc()函数分配内存时,分配内存应大于结构大小
                    优点:1.方便释放内存
                  2.减少内存碎片,提升访问速度
    7.内存分布:1.栈区:由编译器自动分配释放,存放为运行函数分配的局部变量、函数形参、返回数据、返回地址等。操作方式类似于数据结构中的栈
           2.堆区:一般由程序员分配释放,若程序员不释放,程序结束时由OS回收
           3.全局区(静态区):相对而言的全局,不绝对,存放全局变量、静态数据程序结束后由系统释放
           4.文字常量区:存放常量字符中,程序结束后由系统释放
           5.程序代码区:存放函数体(类成员函数和全局函数)的二进制代码
    8.字符串:1.结尾有'\0'的字符数组,字符串由有有效字符和字符串结束符‘\0‘组成。
        2.数组的长度至少是字符串长度+1,‘\0’不是字符串的内容,’\0’并不算入字符的长度。
        3.‘\0’是结束的标志,,决定是否结束循环;
        4.static char s[6]={'h','a','p','p','y','\0'};
           static char s[6]="happy";(这种两种形式进行初始化。)
        注意:用“”进行初始化;
        5.数组与指针有着天然的联系;1.构建用数组,处理用指针;
    10.格式控制符
        十进制的整型: %d %md %ld %u (无符号) %lu
        八进制: %o %#o # --> 输出进制的符号
        十六进制: %x %#x %#X
        字符: %c
        字符串: %s
        单精度浮点: %f %.nf --> n 表示精度
        双精度: %lf
        长双精度 : %Lf
        地址: %p
    11.break 与 continue
        break: 跳出循环结构 / 跳出当前层的循环
        continue : 结束当前这一次循环,重新进入下一次的循环

  • 相关阅读:
    ubuntu安装ROS rosdep init rosdep update报错,完美解决方案!
    DNS域名解析
    循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(5) -- 树列表TreeView的使用
    报错-mmdet/cuda编译报错: fatal error: THC/THC.h: No such file or directory
    python学习笔记(二)
    Softmax 回归 + 损失函数 + 图片分类数据集
    2022年6月电子学会Python等级考试试卷(四级)答案解析
    【滤波跟踪】基于GMPHD实现多目标运动跟踪附matlab代码
    嵌入式系统多线程学习笔记
    从collections库的Counter类看items()方法和enumerate()方法
  • 原文地址:https://blog.csdn.net/zxn275266/article/details/128188763