- 博客(39)
- 收藏
- 关注
原创 C语言文件操作
磁盘上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。上⾯说的适⽤于所有输⼊流⼀般指适⽤于标准输⼊流和其他输⼊流(如⽂件输⼊流);所有输出流⼀般指适⽤于标准输出流和其他输出流(如⽂件输出流)
2024-03-27 22:41:14 754
原创 整数和浮点数在内存中存储及题目
正整数的原、反、补码都相同。负整数的三种表⽰⽅法各不相同。:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。:将原码的符号位不变,其他位依次按位取反就可以得到反码。:反码+1就得到补码。
2024-03-17 22:10:37 777
原创 strncpy函数及其模拟实现
(1) 当想要复制的字符个数大于被复制的源字符数组长度时。(2) 当想要复制的字符个数小于被复制的源字符数组长度时。
2024-03-15 08:32:32 382
原创 ⼤⼩端字节序和字节序判断
其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为⼤端字节序存储和⼩端字节序存储,下⾯是具体的概念:⼤端(存储)模式:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。⼩端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。
2024-03-14 14:09:02 287
原创 memcpy函数及其模拟实现
memcpy() 并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用带来了很大的灵活性,可以面向任何数据类型进行复制。从源source所指的内存地址的起始位置开始拷贝n个字节到目标destin所指的内存地址的起始位置中。destin指针要分配足够的空间,也即大于等于 n 字节的空间。destin-- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。source-- 指向要复制的数据源,类型强制转换为 void* 指针。C语言:#include<string.h>
2024-03-14 08:08:51 297
原创 指针(2)
我们发现:在test_1中用 sizeof (arr)求出的并不是整个数组的字节大小,在主函数中求的则是40字节。但是test_1 和test_2 的结果是一样的,数组名是数组⾸元素的地址;那么在数组传参的时候,传递的是数组名,也就是说本质上数组传参本质上传递的是数组⾸元素的地址,可以看出arr的首元素地址和&arr的地址一样,而arr+1 的地址字节数增加了4个字节,指针变量也是变量,是变量就有地址,那指针变量的地址存放在二级指针中。而 &arr+1 的地址字节数增加了40个字节,
2024-03-07 15:52:31 363
原创 #define 和 typedef 区别
typedef是将 int * 的类型重命名为 ptr_t。所以p1,p2都是指针变量。而 #define 是 替换 ,所以 p3前有* ,p4 前就没有了。
2024-02-02 17:01:17 313
原创 杨氏矩阵
杨氏矩阵的方法是先将第一行的最后一个元素和要查找的数字进行比较,如果小于目标数字,行数就+1,排除了一整行的数字。再用第二行的末尾数字与目标数字比较,如果大于目标数字,列数就-1,排除了一整列的数字。
2024-02-02 10:01:29 331
原创 计算一个数字的二进制中有几个数字1
上面的方法无法计算负数的情况(但将int a = 0 改成 unsigned int a = 0 就可以成功 )1的二进制是00000000000000000000000000000001。13的二进制是00000000000000000000000000001101。这个表达式能将n的二进制中最右边的1去掉,最终n的值会变成0。因为2的n次方的数字的二进制都是最左边有一个1,其他的都是0.所以执行了多少次这个表达式,就说明有多少个二进制数1。
2024-01-24 21:15:24 376 1
原创 交换两个变量的值(不创建中间变量)
前提需知:按位异或^ 是两个2进制位相同为0,不同为1. 所以:计算第二步时,将第一步:a=a^b 整体带入第二步式子里 得 b= a^b^b因为b^b=0 所以 b=a^0 所以b的值成了a.计算第三步时,a还是等于a^b ,因为在第二步之前,没被改变,b还是原来的值,而后面的b就是a的值了。所以 a = a ^ b 转换成 a=a^b^a a^a是0, 所以 a的值成了b。
2024-01-24 20:22:26 384 1
原创 strcat字符串连接函数和模拟实现
连接是将被连接的字符串 连接到目标字符串中最前面的的'\0'处,在之后的就被省略。第一步是找目标字符串的'\0',第二步是一个拷贝,'\0'也要拷贝。
2024-01-05 15:52:08 315
原创 整形提升(隐式类型转换)
C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的和操作数在使用之前被转换为普通整型,这种转换称为。
2023-12-28 20:29:18 422 1
原创 模拟strlen函数
#include<stdio.h>#include<assert.h> //assert的头文件int my_strlen(char* p){ assert(p != NULL); //断言,防止为野指针, int count = 0; while (*p != '\0') { count++; p++; } return count;}int main(){ char a[20] = "abcdefgh"
2023-12-22 21:50:59 337
原创 结构体内存对齐———计算结构体总字节大小
头文件 #include返回值:size_t 无符号整形 ( %u 打印无符号数)(这里建议用%zu)参数:struct Name 结构体名,member Name 成员名。
2023-12-20 19:14:18 385 1
原创 初识结构体
int x;float y;}sp;long id;int age;char sex;}ss;作为了的成员(2)初始化int main()注意:1.字符要用单引号 ,字符串要用 双引号2.初始化在一个结构体中作为成员的那个结构体,应该用花括号 把那个结构体的成员的初始化的值给包含起来 如 上代码所示{3,6.5}(3)打印成员的值对结构体的引用可采用三种形式1.结果体变量名.成员名2.(*结构体指针变量). 成员名3.结构体指针变量 ->(减号和大于号构成。
2023-12-19 15:34:32 938 1
原创 回调函数介绍
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
2023-12-18 12:58:46 330 1
原创 指针与数组
我们以前学过整形指针-- 指向整形的指针,存放整形变量地址的int a=10;int *p=&a;字符指针---指向字符的指针,存放的是字符变量的地址int *p=&ch;而现在我们要学习新的一种指针类型数组指针----指向数组的指针指向一行的数组指针变量,简称为行指针。
2023-12-17 17:44:15 1003 1
原创 扫雷游戏代码实现
先定义game函数作为主体,里面再调用其他自定义函数,从而实现游戏的正常进行注意:game函数前一定要包含头文件 add.h/隐含的布置雷的棋盘--mine//显示在屏幕上的棋盘--show这里是ROWS和COLS,因为我们为了方便计算雷总数把数组扩大,当然定义时也不能忘了要定义大棋盘。
2023-12-12 21:48:34 862
原创 static and extern and const
可以发现,当static修饰局部变量n时,n每一次的值都被保留,而没有static修饰的每一次的值 每一次进入test 时 n重新创建并赋值为0,出·test(),值就被销毁了这是因为static修饰局部变量改变了变量的⽣命周期,⽣命周期改变的本质是改变了变量的存储类型,本 来⼀个局部变量是存储在内存的栈区的,但是被 static 修饰后存储到了静态区。存储在静态区的变量和全局变量是⼀样的,⽣命周期就和程序的⽣命周期⼀样了,只有程序结束,变量才销毁,内存才 回收。但是作⽤域不变的。 ⼀个全局变量被stati
2023-12-10 11:39:15 305 1
原创 多文件书写代码
⼀般情况下,函数的声明、类型的声明放在头⽂件(.h)中,函数的实现是放在源⽂件(.c)⽂件中这里以一个加法函数 Add 做解释说明用来函数声明 用来函数定义 主函数对Add函数的使用注意:1.要在源程序test.c的开始处用预处理命令(#include)将该头文件(add.h)包含起来2.并且要用“ ”双引号给 add.h 包含起来!!!!而不能用尖括号!!!! 错误如下3.当然 #define _CRT_SECURE_NO_WARNINGS #incl
2023-12-10 09:17:46 388 1
原创 sizeof()
1.sizeof()是运算符,不是函数名。它获取变量和数据类型所占内存大小(字节数)一般格式为sizeof(表达式或数据类型名)2.其实 sizeof 也可以计算数组的大小3.sizeof()求 数组元素个数4。
2023-12-09 21:49:38 381
原创 C语言分支和循环语句
break和continue语句 在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。• break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执 ⾏。⼀个 break 只能跳出⼀层 for 循环,如果3层循环嵌套 就得使⽤3个 break 才能跳出循环,所以在这种情况下我们使⽤ goto 语句就会更加的快捷。1.while是关键字,表达式是循环条件,语句是循环体,当括号里的值为非0,就会执行循环,当为0时,就会跳循环。
2023-12-06 22:38:10 376 2
原创 自我介绍!
3.我打算多听网课,多读别人写的,模仿写出属于自己的,学好编程。1.我叫陈宇阳,来自江西省抚州市,我非常喜欢听周杰伦的歌。5.我想进入4399,它让我有一个快乐的童年。4.我想花10小时的时间每周在编程上。2.我编程的目标是学好C语言。
2023-11-18 20:04:32 30
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人