- 博客(30)
- 收藏
- 关注
原创 Linux软件编程-IO编程
标准IO(如 fopen(), fread(), fwrite(), fclose())不是系统调用,而是C标准库提供的库函数。文件IO(如 open(), read(), write(), close())是直接的系统调用。这种分层设计是典型的计算机系统设计思想,高层(标准IO)提供易用性,低层(文件IO)提供灵活性。总的来说,标准IO更容易使用且效率适中,文件IO则提供了更底层的控制能力。文件IO(也叫做无缓冲IO)直接操作文件描述符,每次读写都会触发系统调用。将秒数转换成日历时间。
2025-02-18 10:23:18
1003
原创 数据结构-栈
栈区(后进先出、由操作系统管理):存储局部变量、函数的形参和返回值、函数调用关系(保护和恢复现场)堆区 :开发人员手动管理的区域,自己申请,自己释放(malloc、relloc)数据区:data段 已初始化的全局变量、已初始化的静态变量。bss段 :未初始化的全局变量、未初始化的静态变量static。栈:只允许从一端进行数据的插入和删除的线性结构。代码区:代码、指令、‘a’一些常量。4.满栈、空栈:栈顶是否存有元素。满赠栈、空增栈、满减栈、空减栈。链式栈:以链表的形式实现。
2025-02-11 10:03:49
111
原创 【无标题】
程序的设计:将现实中大量而复杂的问题以特定的数据类型和特定的存储结构存储在内存中,索引存储:通过关键字构建索引表,通过索引表来来找到数据的存储位置。散列存储(哈希存储):将数据元素的存储位置与关键码之间建立确定对。图形结构:元素之间多对多的关系(网状结构)线性结构:元素之间一对一的关系(数组,链表,队列,栈)一组用来保存一种或者多种特定关系的数据的集合(组织和存储数据)容易造成存储空间碎片。(2)数据的物理结构:数据的逻辑结构在计算机内存中的存储形式。(1) 数据的逻辑结构:数据元素与元素之间的关系。
2025-02-07 08:29:41
254
原创 【无标题】
(1)到结构体成员中去查找最长的元素,最终按该元素长度对齐(结构体的最终大小能够整除这个数);(2)每个结构体成员所处的位置(偏移量)必须能够整除该成员的字节数。4.结构体变量的引用:使用结构体成员运算符 (.)一般形式:结构体变量名 . 成员名。在编译时,对类型是不分配空间的,只对变量分配空间。成员表列中对各成员进行类型说明(类型名 成员名)(2)对结构体中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。2. (.)结构体成员元运算符 (->)指向结构体成员运算符。
2025-01-23 08:55:58
227
原创 指针的复习
一般定义形式:类型类型 (*指针变量名) (类型名,类型名....(函数参数表列)),且调用函数时 只能调用与其左右类型,数量都匹配的函数。即int *p = a, 为第一行元素的首地址,p + i 表示第i行元素的首地址,*(p + i) + j表示第i行第j列的元素地址,*(*(p + i) + j)表示第i行第j列的元素。(*p)中的()不能省略,int *p[10]为指针的数组,大小为80字节。int *p = malloc(10),在堆区开辟10个字节的连续空间,空间首地址为p。
2025-01-22 08:58:56
268
原创 c基础复习
直接对p指向的字符变量初始化,此时该字符串并未存储在任何变量中,而是在内存五大区之一的字符串常量区,因为是常量,所以不能修改其值或地址。此时i为只读变量,不能直接对i进行赋值,但是可以在定义i时对其初始化;可以用指针修改其值。如果对*p进行赋值,编译并不报错,但运行时程序会崩溃,在前面加上const,修改为const char *p。此时不可用指针修改指针p指向的变量的值,但是可以修改指针p的值(地址)。地址不能直接相加,但是可以相减,指针相减时,代表两个指针之间相隔sizeof(基类型)个字节。
2025-01-20 20:03:56
187
原创 指针复习1
指针也就是内存地址,指针变量是用来存放内存地址的变量。就像其他变量或常量一样,必须在使用指针存储其他变量地址之前,对其进行声明。*与&一起使用时可以相互抵消,但应注意&*i是一种错误的写法,因为指针运算符要求操作数是一个指针或者地址(只有指针变量才可以解引用)。*为指针运算符,优先级2级,结合自右向左,在定义指针变量时,*仅说明该变量为指针变量,属于类型说明符,指针变量p的大小在不同的操作系统里大小不一样,在32位操作系统占4字节,而在64位操作系统占8字节。数组a[i]与*(a + i)等效。
2025-01-20 09:00:36
198
原创 函数及预处理命令
1.局部作用域:花括号内部,就是局部,所存储的空间为栈区2.全局作用域栈区:在函数外部的区域称之为全局,存储在静态区(全局区);如果不初始化,一定为零;特点:1、标识符必须先定义再使用。2、在同一作用域内不得定义同名标识符。3、在没有包含关系的不同作用域中定义的同名标识符,互不影响。4、在两个或两个以上具有包含关系的作用域中定义的同名标识符,外层标识符在内存不可见(局部优先原则)。1.静态生存期:与程序运行周期相等。全局变量具有静态生存期。
2025-01-17 19:37:33
282
原创 C基础复习
(3)在被调函数中声明形参大小并不起任何作用,因为C语言编译对形参数组大小不做检查,只是将实参数组的首元素地址传给形参数组,因此形参数组名获得了实参数组的首元素的地址。由于实参可以是表达式,而数组元素可以是表达式的组成部分,因此数组元素当然可以作为作为函数的实参,与用变量作实参一样,是单向传递,即值传递。2.间接调用:在调用f1函数的过程中又要调用f2函数,而在调用f2函数的过程中又要调用f1函数,这就是间接调用。1.直接调用:在调用函数f的过程中,又重新调用f函数,这就是直接调用。二.数组作为函数参数。
2025-01-17 08:58:30
227
原创 c基础复习
(3)被调函数结束时,若有返回,使用return返回主调函数。(4)return 的返回值应与类型标识符类型一致。方式:值传递,无法在被调函数中修改主调函数。(2).调函数放前,主调函数放后。形式:类型标识符 函数名 (形式参数表列)注:函数定义类型应与调用函数类型相同。注:(1)不得在函数内部定义函数。字符串常量区:存字符串常量。(2)用户自定义函数。分类:栈区(在8兆左右):入栈:保护现场。作用:降低耦合性,提高复用性。传参方向次序:自右向左。分类:(1)标准函数。
2025-01-15 19:56:49
240
原创 c基础复习
比较s1和s2的大小,表达式结果小于0为s1小于s2,大于0为s1大于s2,等于0为s1等于s2。输出字符数组的有效字符个数。注:比较两个字符数组大小时,严禁使用关系运算符(s1>s2),s1,s2为首元素地址。将s2连接到s1后面。注:连接时要保证s1足够大,不会发生越界访问。1.统计(字符数组的有效字符个数)
2025-01-14 19:23:48
184
原创 c基础复习
如果有一个字符串,前面9个字符都不是空字符(即'\0'),而第10个字符是'\0',则此字符串的有效字符为9个。用这种方法在输入时遇到空格、Tab、回车会直接结束输入,后面输入的会无效;在程序中通常依靠检测'\0'的位置来判定字符串是否结束。(s为数组首元素的地址)putchar(s[i]);同样需要使用遍历算法来输出。五.二分查找 前提:数组有序。1.字符串结束标志:'\0'
2025-01-13 20:03:36
124
原创 C基础复习
3.错误做法:(1)越界访问:当数组名后面的下标小于0或大于等于元素个数时,会将其值放在 该数组内存空间以外的内存中,造成越界访问。continue语句:又称循环短路语句,其作用为结束本次循环,即跳过循环体下面尚未执行的语句,接着进行下一次是否执行循环的判定。1.一维数组的定义:类型说明符 数组名[ ],方括号里面可以是常量表达式(整数),变量。2.一维数组元素的引用:数组名[下标],它为左值,[ ]为下标运算符。例:int a[10];
2025-01-12 17:11:54
174
原创 c基础复习
在进行逻辑运算时,从左至右进行逻辑关系判断,只要能在某一处确定语句整体的逻辑关系,余下不再进行逻辑运算。为了防止这种错误,编程规范规定,进行等值运算时,把常量写前,变量写后。使用比较运算符时,禁止连续使用(每进行一次比较运算,比较结果已经确定,无法使用原数据与其它进行再次比较)。while循环:当型循环,先判断,后执行,可能执行零次,while语句后无分号。for循环:三个语句位置分别是循环变量初始化,循环执行条件,循环趋于停止的条件。注意:循环变量结束时,循环变量的值是循环条件首次为假的值。
2025-01-12 17:06:48
581
原创 c基础复习
逻辑运算符中的“&&”和“||”低于关系运算符,“!3.转向语句 如continue,break,goto,return。(非)→ &&(与)→ ||(或),即“!2.循环语句 如for,while,do while。1.分支语句 如if else ,switch。使用关系运算符来比较两个数的大小关系。优先级相同(高):<、<=、>、>=优先级相同(低):==、!关系运算符,逻辑运算符。(2) || 逻辑或。(1) && 逻辑与。
2025-01-10 20:46:59
172
原创 【无标题】
地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址,需用“&”地址运算符取变量在内存中的地址。其中,%nd为控制输出宽度,例如%5d指输出宽度为5格的数据,若宽度不足则用空格补位;printf函数,即格式输出函数,它的作用是向终端(或系统隐含指定的输出设备)输出若干个任意类型的数据。注:输入与输出均有缓冲区,数据在缓冲区中以队列的形式排布,采用FIFO方式,即先进队列的先出队列,后进队列的后出队列。其中,%nd为控制宽度,例如%3d指输入3格宽度的数据,%*3d指跳过3格宽度的数据。
2025-01-10 08:49:57
308
原创 c基础复习
C语言规定了各种运算符的结合方向(结合性),算术运算符的结合方向为“自左至右”,即先左后右,因此a-b+c中,b先与减号结合,执行a-b的运算,再执行加c的运算。下图中横向向左的箭头表示必定的转换,如字符数据必定先转换为整数,short型转换为int型,float型数据在运算时一律先转换成双精度型,以提高运算精度(即使是两个float型数据相加,也先都化成double型,然后再相加)。对赋值表达式求解的过程是:先求赋值运算符右侧的“表达式”的值,然后赋给赋值运算符左侧的变量。即正数补零,负数补一。
2025-01-09 08:53:13
1669
原创 c基础复习
浮点型在内存中分为3部分,符号位(1),阶码(8),尾数(23),一共32bit。一般步骤,先看符号位,负为1,正取0,然后将整数部分变为二进制,小数部分×2然后直到新小数为0,顺读整数再转为科学计数法形式,将指数加127转为二进制则为阶码,最后是尾数,取掉整数部分补足23位。前者范围为-2^7到2^7-1,后者为0到2^8-1。在指数形式中,e后必须为整数。数值是负的,将该书的二进制绝对值的二进制形式,按位取反再加1. 最高位0为正,1为负。标识符使用时,只能由字母是,数字,下划线构成,开头不能说数字。
2025-01-08 08:24:50
227
原创 Linux基础入门
rm,touch,mkdir可同时创建或删除多个。esc→:w保存,:q退出,:wq保存并退出。文件名称相同会覆盖,文件夹名称相同会报错。绝对路径/home/linux...cp 原 目标 (文件夹-r)拷贝。相对路径相对于现在位置的路径。进入命令模式,输入i进行输入。rm 删除 (文件夹-r)mv 原 目标 剪切。touch 创建文件。mkdir 创建文件夹。pwd 显示当前路径。
2025-01-06 21:24:34
98
原创 【无标题】二叉树遍历查找删除
System.out.printf("找到了,信息为no=%d,name=%s\n",resNode2.getNo(),resNode2.getName());System.out.printf("找到了,信息为no=%d,name=%s\n",resNode3.getNo(),resNode3.getName());System.out.printf("找到了,信息为no=%d,name=%s\n",resNode.getNo(),resNode.getName());
2023-03-30 22:35:48
67
原创 动态规划1
/机器人当前位置为cur,还有rest步要走,共有N个可走的位置,返回 需最终停在aim的方法数。if(rest==0){//如果已经走完了。
2023-03-26 08:55:54
67
原创 【无标题】归并排序
/如果左边的有序序列当前的元素小于等于右边的元素,将左边的元素填充到temp数组,相应的索引进1。//反之右边的有序序列当前的元素小于左边的元素,将右边的元素填充到temp数组,相应的索引进1。//将左右两边的数组填充到temp数组,直到左右两边的有序序列有一边处理完毕。//右边有序数组的初始索引。while(j<=right){//右边元素有剩余。//左边有序数组的初始索引。while(i<=mid){//左边元素有剩余。//将剩余一边的元素依次填充到temp。//将temp数组拷贝到arr。
2023-03-18 16:51:30
77
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅