LinuxC基础篇重难点概括

C基础知识点总结

Linux的常用操作可以概括如下:
        1. 目录结构:Linux的目录结构采用倒置树的形式,一切皆文件。根目录用"/"表示,家目录可以通过"/home/linux64"、主目录、工作目录、家目录HOME以及"~"来表示。普通用户的命令提示符为"$",超级用户为"#"。使用"sudo"命令可以给普通用户临时获取管理员权限,"sudo su"命令可以切换为超级用户,"exit"则用于退出超级用户。

        2. 路径表示:Linux中有绝对路径和相对路径两种表示方法。绝对路径从根目录开始,相对路径是相对于当前所在路径。使用"pwd"命令可以查看当前所在路径。

        3. 常用命令:
               - 自动补全键:Tab键
               - 上下箭头:查看历史命令
               - 终端:可以通过点击终端图标或使用快捷键Ctrl+Alt+T打开一个以家目录为初始路径的终端,Ctrl+Shift+N则可以打开一个与当前路径相同的终端。
               - 清屏:使用"clear"或快捷键Ctrl+L进行清屏操作。
               - ls命令:用于显示当前路径下的内容,不同类型的文件显示的颜色也不同。可以使用"ls -a"查看当前路径下的所有文件(包括隐藏文件),"ls -l"显示详细属性, "ls -la"显示所有内容的详细属性, "ls [文件夹]"用于打印当前路径下的指定文件夹的内容。
               - touch命令:用于创建文件,可以一次创建多个。
               - mkdir命令:用于创建文件夹,可以一次创建多个。
               - rmdir命令:用于删除空文件夹,可以一次删除多个。
               - rm命令:用于删除文件,可以一次删除多个。加上"-rf"参数可以删除文件夹(包括非空文件夹)且不提示,加上"-ri"参数则会挨个提问是否删除。
               - cd命令:用于切换路径,可以使用绝对路径或相对路径。不加参数直接输入"cd"则会返回家目录,"cd -"会回到上一次操作的目录,"cd .."会转到上一级目录。
               - cp命令:用于复制文件或文件夹。
               - mv命令:既可以用于移动文件或文件夹,也可以用于重命名文件或文件夹。

        4. vim编辑器:vim是一款文本编辑器。可以通过"vim 文件名"命令打开文件进行编辑。底行模式下可以使用命令"w"保存,"q"退出,"wq"保存并退出,"q!"强制退出,"wq!"强制保存退出,"set nu"显示行号,"set nonu"取消显示行号。命令行模式下可以使用"yy"复制,"nyy"复制n行,"p"粘贴,"dd"剪切(删除),"ndd"剪切n行,"u"撤销,"ctrl+r"反撤销。

        5. gcc编译器:gcc是Linux下的默认C语言编译器。可以使用"gcc 文件名"命令来编译C语言程序,默认生成的可执行文件名为"a.out",也可以使用"-o"参数来指定生成的可执行文件名。

    
C语言部分难点:
        ①宏#define
             宏是一种单纯的替换在所有运算之前;#define  函数名(形参)  函数体

        ②变量
            变量的声明格式为:存储类型 数据类型 变量名
            存储类型是用来描述变量在内存中的存储方式和生命周期的关键字。常见的存储类型包括自动变量(auto)、寄存器变量(register)、外部变量(extern)和静态变量(static)。
            自动变量(auto)是默认的存储类型,它修饰的局部变量存储在栈区。栈区是一块内存,用于存储函数的局部变量和临时变量。自动变量的作用范围和生命周期受限于其所在函数,函数执行结束后自动销毁。
            寄存器变量(register)用于修饰局部变量,修饰的变量存储在寄存器中。寄存器是CPU内部的一组高速存储器,访问速度非常快。但寄存器的内存空间有限,如果寄存器已满,则修饰的变量会被存储在栈区。使用寄存器变量可以加快程序的执行速度,适用于访问频繁的变量。
            外部变量(extern)用于修饰全局变量,修饰的变量存储在静态区。静态区是一块特殊的内存区域,用于存储全局变量和静态变量。外部变量可以在多个源文件中共享,在一个源文件中声明,然后在其他源文件中使用。
            静态变量(static)既可以修饰全局变量,也可以修饰局部变量。修饰的变量存储在静态区。当静态变量修饰局部变量时,该变量的作用范围和生命周期与全局变量相同,但只能在所在函数内部访问,函数执行结束后仍然保留其值。

        ③float有效数字的位数6~7位,输出格式%f;double有效数字的位数15~16位,输出格式%lf。

        ④指针
            指针的类型
                去掉指针名剩下的就是指针类型
            指针指向的类型
                去掉指针名和*剩下的就是指针指向的类型
            指针的值
                指针本身存储的数值,这个值被编译器当作一个地址,在32位操作系统中,所有指针的值都是32位整数
            指针指向的值
                从指针的值所代表的内存地址开始,长度为sizeof(指针指向的类型)的内存区存储的值

        ⑤指针语法
            int p; //这是一个普通的整型变量
            int *p; //首先从p 处开始,先与*结合,所以说明p 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型所以p是一个返回整型数据的指针
            int p[3]; //首先从p 处开始,先与[]结合,说明p 是一个数组,然后与int 结合,说明数组里的元素是整型的,所以p 是一个由整型数据组成的数组
            int *p[3]; //首先从p 处开始,先与[]结合,因为其优先级比*高,所以p 是一个数组,然后再与*结合,说明数组里的元素是指针类型,然后再与int 结合,说明指针所指向的内容的类型是整型的,所以p 是一个由返回整型数据的指针所组成的数组
            int (*p)[3]; //首先从p 处开始,先与*结合,说明p 是一个指针然后再与[]结合(与"()"这步可以忽略,只是为了改变优先级),说明指针所指向的内容是一个数组,然后再与int 结合,说明数组里的元素是整型的.所以p 是一个指向由整型数据组成的数组的指针
            int **p; //首先从p 开始,先与*结合,说是p 是一个指针,然后再与*结合,说明指针所指向的元素是指针,然后再与int 结合,说明该指针所指向的元素是整型数据.由于二级指针以及更高级的指针极少用在复杂的类型中,所以后面更复杂的类型我们就不考虑多级指针了,最多只考虑一级指针
            int p(int); //从p 处起,先与()结合,说明p 是一个函数,然后进入()里分析,说明该函数有一个整型变量的参数,然后再与外面的int 结合,说明函数的返回值是一个整型数据
            int (*p)(int); //从p 处开始,先与指针结合,说明p 是一个指针,然后与()结合,说明指针指向的是一个函数,然后再与()里的int 结合,说明函数有一个int 型的参数,再与最外层的int 结合,说明函数的返回类型是整型,所以p 是一个指向有一个整型参数且返回类型为整型的函数的指针
            int *(*p(int))[3]; //从p 开始,先与()结合,说明p是一个函数,然后进入()里面,与int 结合,说明函数有一个整型变量参数,然后再与外面的*结合,说明函数返回的是一个指针,,然后到最外面一层,先与[]结合,说明返回的指针指向的是一个数组,然后再与*结合,说明数组里的元素是指针,然后再与int 结合,说明指针指向的内容是整型数据.所以p 是一个参数为一个整数据且返回一个指向由整型指针变量组成的数组的指针变量的函数。
    
        ⑥数组与指针的联系
            1. 数组名是指针:在C语言中,使用数组名就相当于使用指针来访问数组。例如,如果有一个整型数组int arr[5],那么arr可以看作是一个指向整型的指针。因此,arr指向数组的第一个元素,即arr[0]。
            2. 指针算术:由于数组名是指针,因此可以对其进行指针算术操作。例如,可以对数组名进行加法操作来访问数组中的其他元素。例如,arr + 1表示指向数组第二个元素的指针。
            3. 数组指针:可以声明指向数组的指针。这样的指针可以指向一个数组,并且可以通过指针来访问数组中的元素。例如,可以声明一个指向整型数组的指针int *ptr,然后将其指向数组arr,然后通过`ptr`来访问数组元素,如*ptr、*(ptr + 1)等。
    
        ⑦逻辑运算
            C语言中的逻辑与(&&)和逻辑或(||)运算符具有截断法则。逻辑与(&&)运算符的截断法则是,在两个操作数中,只要有一个操作数的值为0,整个表达式的结果就会立即确定为0,不再计算剩下的操作数。这意味着只要有一个条件不满足,就没有必要再去计算后续的条件。这种特性可以用于提高程序的效率和减少不必要的计算。相似地,逻辑或(||)运算符的截断法则是,在两个操作数中,只要有一个操作数的值为1,整个表达式的结果就会立即确定为真,不再计算剩下的操作数。这意味着只要有一个条件满足,就没有必要再去计算后续的条件。同样地,这种特性可以用于提高程序的效率和减少不必要的计算。

        ⑧赋值运算
            在C语言中,常量不能出现在赋值(=)、自增(++)、自减(--)、加法赋值(+=)、减法赋值(-=)、乘法赋值(*=)、除法赋值(/=)和求余赋值(%=)等运算符的左侧。这是因为这些运算符需要在左侧接收一个变量,而常量的值是不可改变的。常量表示一个固定的数值或对象,无法赋值或修改。
特别需要注意的是指针常量和数组名。在C语言中,指针常量是指指针的值不可改变,而指针所指向的数据可以改变。数组名实际上可以看作是一个指向数组首元素的指针常量。虽然可以通过数组名进行读取和修改数组元素的值,但不能对数组名进行赋值操作。
因此,需要注意遵循这些规则,避免在常量出现的地方进行赋值操作或使用自增、自减等运算,这样可以保证程序的正确性和避免可能的错误。

        ⑨逗号运算
            c = (a++, b++, a + b);a++和b++是两个独立的表达式,它们在a + b之前被执行。逗号将这些表达式分隔开,并返回最后一个表达式的值,即a + b。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值