
0基础 3个月掌握C语言
文章平均质量分 85
以上为我的学习笔记与个人理解 如若有错 麻烦大家指出 感谢啦
alien爱吃蛋挞
这个作者很懒,什么都没留下…
展开
-
C语言完结篇(17)
⽐如:⽬标⽂件的格式elf,链接底层实现中的空间与地址分配,符号解析和重定位等,如果你有兴趣,可以看《程序的⾃我修养》⼀书来详细了解。(假定某个程序中声明了⼀个某个⻓度的数组,如果机器内存有限,我们需要⼀个很⼩的数组,但是另外⼀个机器内存⼤些,我们需要⼀个数组能够⼤些。将源代码程序被输⼊扫描器,扫描器的任务就是简单的进⾏词法分析,把代码中的字符分割成⼀系列的记号(关键字、标识符、字⾯量、特殊字符等)。如果⼯程⽐较⼤,有公共使⽤的头⽂件,被⼤家都能使⽤,⼜不做任何的处理,那么后果真的不堪设想。原创 2024-04-07 09:06:59 · 1225 阅读 · 0 评论 -
0基础 三个月掌握C语言(16)
磁盘(硬盘)上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)原创 2024-04-02 10:00:00 · 1098 阅读 · 0 评论 -
0基础 三个月掌握C语言(15)
但是,这里有一个重要的问题:在C语言中,函数参数是按值传递的,这意味着 p 是一个局部变量,它只是原始指针的一个副本。如果 n 是一个局部变量,那么返回它的地址是不安全的,因为当函数返回后,局部变量 n 的内存可能会被释放或覆盖。需要注意的是,如果 n 是一个局部变量(定义在函数内部的变量),在函数返回后,这个局部变量占用的内存可能会被释放或覆盖,所以返回它的值通常没有问题,但尝试返回它的地址(如 &n)则是不安全的。这里的 n 必须是一个具有确定值的表达式,并且它的类型必须与函数的返回类型相匹配或兼容。原创 2024-03-26 07:08:16 · 1131 阅读 · 0 评论 -
0基础 三个月掌握C语言(14)-上
其实C语言有内置类型 也有自定义的类型内置类型(C语言本身支持的现成的类型) 如:char short int long float double....但仅仅有这些类型是不够的比如说 我们想表示一个人(复杂对象)对于人的描述那就很多了 比如:性别 年龄 身高........所以C语言就有了自定义类型。原创 2024-03-25 10:00:00 · 789 阅读 · 0 评论 -
0基础 三个月掌握C语言(13)-下
这意味着,如果E为8位,它的取值范围为0~255;但是,我 们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存⼊内存时E的真实值必须再加上⼀个中间数,对于8位的E,这个中间数是127;再比如说 假如我们要存 0.5(十进制)-----0.1(2进制)---(1.0)*2^(-1)这里的指数E为-1 因为E是无符号数 所以E=-1+127=126(8位的E)这时,浮点数就采⽤下⾯的规则表⽰,即指数E的计算值加上127(或1023),得到真实值,再将有效数字M前加上第⼀位的1。原创 2024-03-23 21:35:57 · 1255 阅读 · 0 评论 -
0基础 三个月掌握C语言(13)-上
在讲解操作符时 我们就已经学习了该部分的内容 这里我们回顾一下整数的二进制表示方法有三种:原码 反码 补码有符号的整数(unsigned) 三种表达方式均有符号位和数值位两部分 最高位的一位被当作符号位 符号位用0表示正 用1表示负 除符号位之外 其余为数值位负整数的三种表达方式各不相同直接将数值按照正负数的形式翻译成二进制 得到的就是原码将原码的符号位不变 其他位依次取反 得到的就是反码反码+1 得到补码对于整形来说:数据存放内存中其实存放的是补码原因我这里就不过多叙述了 之前有讲过。原创 2024-03-19 22:54:03 · 680 阅读 · 0 评论 -
0基础 三个月掌握C语言(12)
我们上述代码用的是我们自己所模拟的my_memcpy 它所实现的也就是memcpy这个函数所想实现的 如果source和destination有任何的重叠 复制的结果都是未定义的。我们想把1 2 3 4 5放到 3 4 5 6 7的位置上 但我们看到结果并不是这样 我们的1和2覆盖了3 4的值 导致后面都是1 2。但对整形(不是一个字节)来说 因为我们是以字节为单位设置的 所以我们要注意设置后的结果是不是我们想要的。和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。原创 2024-03-16 18:06:47 · 507 阅读 · 1 评论 -
0基础 三个月掌握C语言(11)
在不同的系统和C语言标准库的实现中都规定了一些错误码 一般是放在errno.h这个头文件中说明的 C语言程序启动的时候就会使用一个全局的变量errno来记录程序的当前错误码 只不过程序启动的时候errno是0 表示没有错误 当我们在使用标准库中的函数的时候发生了某种错误 就会将对应的错误码 存放在errno中 每一个错误码都有对应的错误信息的 strerror函数就可以将错误对应的错误信息字符串的地址返回。值得注意的是,dest需要有足够的空间来容纳要拷贝的字符串。原创 2024-03-16 17:58:44 · 2439 阅读 · 2 评论 -
0基础 三个月掌握C语言(10)
数组名的意义:1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。3.除此之外所有的数组名都表示首元素的地址。原创 2024-03-08 00:00:00 · 701 阅读 · 1 评论 -
0基础 三个月掌握C语言(9)
如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。我们看到它的传的数组是int类型 所以这个函数只能排序整型元素 当然我们可以在传递的时候 改变类型 但这也没qsort方便。这里 首先j=0 cmp函数的前一个base指向数组首元素(9) 第二个base指向下标为1的元素(8)void* 指针--是无具体类型的指针 它的作用就是可以接受任何类型的地址。1.修改形参的类型(如上图的int)--让这个函数能接受任意类型的数据。原创 2024-03-05 20:59:26 · 709 阅读 · 0 评论 -
0基础 三个月掌握C语言(8)
signal的第二个参数的类型是void (*)(int) 的函数指针类型 该指针可以指向一个函数 指向的函数参数是int 返回类型是void。二维数组其实可以看作是每个元素是一维数组的数组 也就是二维数组的每个元素是一个一维数组 那么二维数组的首元素就是第一行(一维数组)解释:p先和*结合 说明p是一个指针变量 然后指针指向的是一个大小为10个整型的数组 所以p是一个指针 指向一个数组 叫数组指针。数组指针变量是用来存放数组地址的 那怎么获得数组的地址呢 那当然是用我们学习过的&数组名。原创 2024-03-02 21:47:18 · 1291 阅读 · 0 评论 -
0基础 3个月掌握C语言(7)
所以函数形参的部分 理论上应该使用指针变量来接收首元素的地址(因为指针变量是用来存放地址的)----也可以写成数组的形式 但本质上都是指针 写成数组的形式是为了便于理解。那么在数组传参的时候,传递的是数组名,也就是说本质上数组传参本质上传递的是数组首元素的地址。我们在32位的系统上 p是指针变量,占用4个字节的空间,p也是有自己的地址,&p就拿到了p的地址,p是一级指针。2.&数组名 这里的数组名也表示整个数组 取出的是整个数组的地址(整个数组的地址和数组首元素地址是有区别的)原创 2024-02-28 22:35:23 · 1042 阅读 · 0 评论 -
0基础 3个月掌握C语言(6)
计算机上cpu在处理数据的时候 需要的数据是在内存中读取的 处理后的数据也会放回内存中内存空间如何高效的管理呢?其实也是把内存划分为一个个的内存单元 每个内存单元的大小取1个字节1Byte(字节)=8bit(比特位)一个比特位可以存储一个2进制的位1或0在计算机中我们把内存单元的编号也称为地址 这样就可以快速找到一个内存空间C语言中给地址起了新的名字叫:指针所以我们可以理解为:内存单元的编号==地址==指针。原创 2024-02-27 18:30:03 · 945 阅读 · 0 评论 -
0基础 3个月掌握C语言(5)
定义其实上述已经讲了 那我们现在学学结构体变量的初始化(记得数组中存放多个元素 使用{}初始化) 结构体中存放多个成员 也使用{}来初始化//变量的定义int x;int y;//声明类型的同时 定义变量p3,p4来存放成员 初始化p3 p4//全局变量{ //成员int age;int data;int main()//局部变量 初始化struct Student s1={“张三”,”男”,18,”2023440137”};//指定顺序初始化。原创 2024-02-24 14:53:19 · 971 阅读 · 0 评论 -
0基础 3个月掌握C语言(4)
函数不返回 函数对应的栈帧空间就一直占用 所以如果函数调用中存在递归调用的话 每一次递归函数调用都会开辟属于自己的栈帧空间 直到函数递归不再继续 开始回归 才逐层释放栈帧空间。把一个大型复杂问题层层转化为一个与原问题相似 但规模较小的子问题来求解 直到子问题不能再被拆分 递归就结束了 所以递归的思考方式就是把大事化小的过程。所以如果采用函数递归的方式完成代码 递归层次太深 就会浪费太多的栈帧空间 也可能引起栈溢出(stack overflow)的问题。递归:运行时开销---浪费空间。原创 2024-02-02 21:34:23 · 390 阅读 · 0 评论 -
0基础 3个月掌握C语言(3)
作用域是程序设计概念 通常来说 一般程序代码中所用到的名字并不总是有效的 而限定这个名字的可用性的代码范围就是这个名字的作用域。使用建议:如果一个全局变量 只想在所在的源文件内部使用 不想被其他文件发现 就可以使用static修饰。全局变量是具有外部链接属性的 但是被static修饰后 外部链接属性就变成内部链接属性。生命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的一个时间段。只能在自己所在的.c文件中使用 其他.c文件无法使用 即 不能再跨文件使用。原创 2024-01-29 18:32:32 · 990 阅读 · 0 评论 -
0基础 3个月掌握C语言(2)
二维数组的创建二维数组的概念。原创 2024-01-28 19:57:22 · 1086 阅读 · 0 评论 -
和我一起 0基础 3个月掌握C语言(1)
本篇文章仅仅是我个人见解 如有错误 麻烦大家指点一下 感谢原创 2024-01-17 21:18:01 · 935 阅读 · 0 评论