
C语言
文章平均质量分 82
宝贝儿好
李园园
展开
-
【C语言学习笔记】十三、文件操作
你想啊,520当成数字,它是一个整型,整型就是占4个字节啊,而且正的数字存储是数字的二进制,而且如果还带符号位,还得更改第一个位域,如果是个负数,还得用补码存储的呢,如果是个小数,那就更复杂的存储规则。再比如,之前我们在讲过使用补码的好处时,根据的案例可是都不考虑存放的形式的,大端的存放形式可以将符号位的判定固定为第一个字节,容易判断正负,但你如果按照小端的方式来存放,你还能够快速地判断一个数的正负吗?其实文本文件的本质也是二进制的,只不过文本文件存储的是相应字符的编码值。我电脑环境是以小端的形式存储的。原创 2023-12-05 08:47:20 · 1194 阅读 · 0 评论 -
【C语言学习笔记】十二、位操作
其实C语言是没有规定一个字节是8位的!但如果是有符号数,那左边第一位是符号位,那移动是否要覆盖符号位,这就又是编译器说了算,所以如果这个数恰好是个负数,而且负数又是以补码形式存在的,所以如果覆盖了,数值都将会发生极大的变化。由于内存的基本单位是字节,我们很多函数都是在字节的基础上写的,而位域是对字节的细分,所以很多函数不能对位域进行运算。意思就是位域这种数据结构,允许你把一个字节拆开使用,把一个字节中的二进制位划分成不同的区域,并指定不同区域的位数,并且可以给不同区域命名,就可以对每个区域进行单独使用。原创 2023-12-05 08:40:03 · 879 阅读 · 0 评论 -
【C语言学习笔记】十一、共用体、枚举类型
A:在A处,我们是声明一个枚举数据类型,这个数据类型里面的sun mon tue等是常量,并且这些常量的值是int整型的、并且默认情况下是从0开始的,就是默认sun是0,mon是1,tue是2,,,依次加1往后类推。并且这些常量的值是在程序编译的时候就关联起来了,就是指定好了,就是它是个常量是无法进行修改的,如果你在程序中试图修改就会报错的。localtime函数是将一个time_t类型的值转换成具体的本地时间和日期,也就是说localtime函数的参数是一个time_t类型的参数。原创 2023-12-05 08:37:47 · 378 阅读 · 0 评论 -
【C语言学习笔记】十、typedef
在编程中使用typedef目的一般有两个:一是给变量起一个容易记住且意义明确的别名;二是简化一些比较复杂的类型声明。1、typedef是C语言的重要关键字,其最基本的功能是给数据类型起别名。宏定义是直接替换,typedef是对类型的封装。原创 2023-12-05 08:36:25 · 186 阅读 · 0 评论 -
【C语言学习笔记】九、单链表
那找到第一个节点,是不是就可以读出第一个节点里面的成员p的值了,前面说了,我们给p的值赋的是它下一个节点的地址。说明:上面的示例的代码是我没有看视频,先自己按照自己的思路写的,由于我也是一枚初学者,所以写得好不好我不知道,也就是正常运行出结果而已,其他方面没有做更多的考虑。从上图可以看出,链表里面的各个元素在内存中可以不必紧密挨在一起,只要有一个细小的空间能容纳一个节点,就能存储一个节点的信息,而无需申请一个连续的大空间,将所有的节点紧挨放进去。下图是我自己写的,实际写的过程中,发现还是有很多要考虑的。原创 2023-12-05 08:32:43 · 654 阅读 · 0 评论 -
【C语言学习笔记】八、结构体
前面我们讲的数据类型都是一些非常基本的数据类型,比如整型、字符型、浮点型等,之所以要确定数据的类型,是因为要确定在内存中给这些数据留多大的空间,以及这些数据如何存储在给定的空间里。比如,现在我们要存放一些书籍的名字,每本书都要存放名称、作者、价格、出版日期、出版社、ISBN号等信息,整型字符型等这些基本类型就显得太繁琐了,当然有人说用数组存放,但是数组里面的元素类型都是一样的啊,这里名称和作者是字符型,那价格又是整型,元素的类型不一致呀。这里给指针赋值,赋值的时候一定赋的是结构体变量book的地址。原创 2023-12-05 08:20:17 · 991 阅读 · 0 评论 -
【C语言学习笔记】七、宏定义、内联函数
上面的程序,就是要循环10次,每次循环都要调用一次square函数。这和函数的参数类似,但又不一样。而函数的参数则是不同,函数的形参和实参是2个不同的变量,它们是通过栈进行传输的;非也,内联函数虽然节省了函数调用的时间消耗,但由于每一个函数出现的地方都要进行替换,因此增加了代码编译的时间。使用关键字inline,也就是使用内联函数,就不会频繁的申请栈空间,代码不会频繁的跳来跳去的去执行。比如,square函数是内嵌到main函数中,不会执行着main函数,又要调用square函数,再跳到square函数。原创 2023-12-05 08:15:27 · 774 阅读 · 0 评论 -
【C语言学习笔记】六、动态内存管理
这样做的目的就是,如果程序继续往下执行又要malloc申请DEFG..等空间时,就先到内存池看看有没有合适的空间,如果有就直接用了,就不需要切换到内核层去申请了,也就是不需要调用malloc函数了,一是节省了开销而是内存碎片最大限度地减少了。说明:malloc函数申请的内存空间是位于内存的“堆”上(C语言在内存上的布局是:像一些局部变量是存放在“栈”上的,而申请的动态内存是存放在"堆"上的),如果你不主动释放堆上的数据,那这个数据就会一直存在,直到程序运行完毕。平时经常听到的堆栈,一般指的是栈。原创 2023-12-05 08:13:22 · 637 阅读 · 0 评论 -
【C语言学习笔记】五、函数
如果第一次循环结束把a的值从默认的0改到1,那第二次循环的时候,虽然是默认赋值,但就默认的是1而非0了,所以打印出来的效果也是递增的效果。这里无法运行出来正确的结果是因为:函数get_word的返回值是变量str1 str2 str3,这些变量是get_word函数自己体内的局部变量,当 main函数调用get_word的时候,get_word函数自己体内的局部变量已经被释放了,就是内存中已经销毁了,就是临时分配的地址已经不存在了,自然就也无法读取那个地址里面的值了。所以,我们要封装,第一层封装就是函数。原创 2023-12-05 08:10:49 · 965 阅读 · 0 评论 -
【C语言学习笔记】四、指针
(七)指针指针是C语言的精髓部分,程序员对指针的掌握程度直接决定了其编程能力。1、内存是如何存储、读取数据的?之前讲变量的时候提到:如果我们在程序中定义一个变量,那么程序在进行编译的时候,系统就会根据变量的类型,在系统中分配对应长度的空间来存储变量的内容。而我们访问变量的时候是通过变量名来访问的。通过变量名来访问内存是一种相对来说比较安全的方式,因为只有你定义了这个变量你才能访问它,也就是访问内存。你没定义变量,你就访问不到对应的内存空间。内存的最小索引单元是一个字节。我们可以把一个字节抽象成原创 2023-12-05 08:01:40 · 1224 阅读 · 0 评论 -
【C语言学习笔记】三、数组
表示创建一个数组a,数组a里面的元素是int类型的、数组a有10个元素,其中第3个元素的值是1,第5个元素的值是2,第8个元素的值是3,其他元素的值都默认是0。这2个函数是一一对比每个字符的,当第一个字符串中的字符的ASCII码大于第二个字符串对应位置的字符的ASCII码,就返回一个正数,当小于时,就返回一个负数。意思就是说:如果数组的尺寸是整型常量或者整型常量表达式的时候,那么这个数组的尺寸就不是一个可变长度的数组,否则,这个数组就是一个可变长的数组。也就是说,在C99标准下,C语言已经支持可变数组了!原创 2023-12-03 22:14:42 · 965 阅读 · 0 评论 -
【C语言学习笔记】二、流程控制与语言结构
(三)流程控制与语言结构条件控制语句:if 语句、switch语句循环控制语句:while语句、do...while 语句、for语句跳转语句:break语句、continue语句、goto语句1、if 语句(1)最简单的if语句判断if 后面的小括号()不能省,小括号里面是写表达式的,当判断这个表达式的返回值是真的时候,就执行if下面的语句块;当判断这个表达式的返回值是假的时候,就跳过if语句。所以,小括号里面的表达式,你也可以直接写1或0,就是真或假。 if 下面的花括号{}可以省原创 2023-12-03 22:11:38 · 743 阅读 · 0 评论 -
【C语言学习笔记】一、基础语法
C 语言这套笔记是参考bilibili上,小甲鱼的视频,讲得非常不错。搜小甲鱼就能找到他的视频,这是他的网站:www.fishc.com 谨以此笔记献给无私奉献的小甲鱼先生。(一)基本认识1、对C语言的基本理解编程语言排行榜TIOBE的排名,C语言是千年老二。老一是Java。但是,C语言作为底层开发的基础语言,语法上基本很难有太大的改变,因为牵一发而动全身,所以还是非常有必要学一学的。入门:语法-程序的调试技巧进阶:指针的应用-多线程、多进程程序的开发-数据库的调用和管理探索原创 2023-12-03 22:08:36 · 1393 阅读 · 0 评论