- 博客(19)
- 收藏
- 关注
原创 调试-初阶完结!
const修饰*p,意思是p指向的对象不能通过p来改变了,但是p变量本身的值可以改变,可以把p改成别的值,如p=&n;Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。3. 如果i和arr之间有适当的空间,利用数组的越界操作就可能会覆盖到i,就可能会导致死循环出现的。const 放在 * 的右边意思是p指向的对象是可以通过p来改变的,但是不能修改p变量本身的值。while (*dest++ = *src++)//'\0'的阿斯克码为0。
2025-04-17 19:42:16
235
原创 指针-初步完结!
(2^32Byte == (2^32 / 1024)KB == (2^32 / 1024 / 1024)MB == (2^32 / 1024 / 1024 / 1024)GB == 4GB)4G的空闲进行编址。//右边的*说明ppa是指针变量,int*说明,ppa这个变量指向的对象ppa的类型是int*/*1. sizeof(数组名),这里的数组名表示的是整个数组,计算的是整个数组的大小,单位是字节。要将& num(num的地址)保存到p中,我们知道p就是一个指针变量,那它的类型是怎样的呢?
2025-04-14 00:27:33
405
原创 操作符-整章完!
在这个例子中,a是int类型,b是float类型,在执行a + b运算时,编译器会自动把int类型的a转换为float类型,然后再进行加法运算。相同时,结果位为 0。先计算表达式 1 的值,若为真(非 0),则整个条件表达式的值为表达式 2 的值;当 num 所有的 1 都被置为 0 后,num 的值就变为 0 了,此时 while 循环的条件表达式为 “假”,循环终止。num &= (num - 1) 即 00001111 & 00001110,结果为 00001110,count 变为 1。
2025-04-12 18:27:52
437
原创 操作符-算术&位移
从最低位开始计算,0 - 1 不够减,向高位借 1 当 2,得到 10 - 1 = 1,其余高位依次计算,最终得到反码为 11111111 11111111 11111111 11110001。按位权展开求和,二进制数从右到左每一位的位权分别是 2 ^ 0, 2 ^ 1, 2 ^ 2,...,将每一位上的数字乘以对应的位权,然后相加。有符号整数使用最高位作为符号位(0 表示正数,1 表示负数),因此非负的有符号整数的取值范围是从 0 到 (2 ^ {n - 1} - 1),
2025-04-10 00:14:01
968
原创 数组应用-扫雷
/这里放的是字符'0'和'1',需要'1'-'0'=1,'0'-'0'=0,因为字符 '0' 的 ASCII 码值是 48,字符 '1' 的 ASCII 码值是 49。使用 rand() 函数生成随机坐标,检查该位置是否已经有雷,如果没有则将该位置标记为雷('1'),并减少剩余雷的数量。在游戏中,mine 数组初始化为 '0' 表示没有布置雷,show 数组初始化为 '*' 表示未排查的区域。//存放排查出的雷的信息。printf("-----------扫雷游戏-----------\n");
2025-04-09 03:10:48
421
原创 数组应用-三子棋
调用 srand((unsigned int)time(NULL)) 函数,利用当前时间作为随机数种子,保证每次运行程序时电脑下棋的坐标是随机的。利用双重循环遍历棋盘的每个位置,若发现有未被占用的位置(值为 ' '),则返回 0 表示棋盘未满;若所有位置都被占用,返回 1 表示棋盘已满。进入一个无限循环,在循环中,玩家先下棋,调用 iswin 函数判断游戏结果,若游戏结束(返回值不是 'C'),则跳出循环;否则,打印当前棋盘,电脑下棋,再次调用 iswin 函数判断游戏结果,若游戏结束则跳出循环。
2025-04-08 17:07:36
347
原创 数组-完结
为什么printf("%p\n", &arr),printf("%p\n", arr);因此,sizeof(arr) / sizeof(arr[0])的结果并非数组的元素数量,这就会造成排序逻辑出错。按理说,数组名是数组首元素的地址,那么int n = sizeof(arr);1. sizeof(数组名),这里的数组名表示的是整个数组,计算的是整个数组的大小,单位是字节。
2025-04-08 01:18:13
348
原创 数组-一维数组
例如,要访问 arr[i],可以通过首地址加上 i * sizeof(int) 来得到该元素的地址。数组在创建的时候如果想不指定数组的确定的大小就得初始化。//在字符数组初始化时,直接使用 ASCII 码值和使用单引号括起来的字符常量是等效的。比如元素1的地址 : 01 00 00 00, 元素2的地址:02 00 00 00。数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。//对数组内容赋值,数组是使用下标来访问的,下标从0开始。随着数组下标的增长,元素的地址,也在有规律的递增。
2025-04-07 00:00:32
288
原创 函数-整篇完结!
当前 my_strlen("abc") 的执行会暂停,等待 my_strlen("bc") 调用返回。当前 my_strlen("bc") 的执行暂停,等待 my_strlen("c") 调用返回。当前 my_strlen("c") 的执行暂停,等待 my_strlen("") 调用返回。my_strlen("bc") 函数在等待 my_strlen("c") 返回后,得到返回值 1。my_strlen("c") 函数在等待 my_strlen("") 返回后,得到返回值 0。执行 1 + 0,返回 1。
2025-04-05 21:35:31
265
原创 语句-猜数字游戏
int binary_search(int arr[], int k)中int arr[]的是一个指针变量,等价于int* arr。这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。//int c =add(add(a,3),b)//数组名代表数组首元素的地址,函数接收此地址后就能对数组元素进行访问。//在 C 语言里,当你调用函数时,函数参数若为数组,仅需给出数组名。//数组名代表数组首元素的地址,函数接收此地址后就能对数组元素进行访问。
2025-04-04 22:31:20
222
原创 语句-练习
因为 z 中保存的是 a 原来的值,而 py 指向 b,所以这一步相当于把 a 原来的值赋给了 b。这样,b 的值就变成了 a 原来的值,从而完成了 a 和 b 两个变量值的交换。这时,a 的值就变成了 b 原来的值,而 a 原来的值由于之前已经保存到 z 中,所以不会丢失。例如,若直接写 a = b;,那么 a 原本的值就会被 b 的值覆盖,此时 a 原来的值就丢失了,也就无法完成交换。例如之前提到的 swap 函数,它的目的是交换两个变量的值,这就需要直接操作变量的内存地址,所以要使用指针来传递参数。
2025-04-02 20:51:34
405
原创 语句-循环语句,完结!
/如果这里放一个固定的数,那么rand生成的也是固定的,所以需要一个随机的数time()使用rand()函数生成一个随机数,然后对100取模得到一个0到99之间的数,再加上1,最终得到一个1到100之间的随机数,存储在变量ret中。time()函数用于获取当前的时间戳,常作为srand()的参数,以保证每次程序运行时生成不同的随机数序列。这就会导致每次新游戏生成的随机数序列都是一样的,玩家每次猜的都是同一个数字,失去了游戏的随机性和趣味性。
2025-04-01 21:05:58
239
原创 语句-循环语句-while
/if(password == "abcdef")//比较2个字符串是否相等,不能使用==,而应该使用一个库函数:strcmp。//如果用 int right = sizeof(arr1) / sizeof(arr[0])-2,因为把\0算进去了。printf("找到了,下标是:%d\n", i);printf("找到了,下标是:%d\n", mid);printf("三次密码均输入错误,退出程序\n");
2025-03-31 20:58:56
416
原创 语句-分支语句
c语句可分为以下五类:表达式语句函数调用语句控制语句符合语句空语句c语言是【结构化】的程序设计语言顺序结构 选择结构 循环结构先介绍控制语句控制语句用于控制程序的执行流程,以实现程序的各种结构方式。它们由特定的语句定义符组成,c语言有9种控制语句可分成以下三类:1. 条件判断语句也叫分支语句:if语句、switch语句2. 循环语句:do while语句、while语句、for语句3. 转向语句:break语句、goto语句、continue语句。
2025-03-30 19:48:32
606
原创 初识C语言第四天,完结!
或者printf("%s %d %s %s\n", ps->name, ps->age, ps->sex, ps->tele);//()就是函数调用操作符,add,2,3都是()的操作数。// / 除号两端都是整数的时候,执行的是整数除法,如果两端只要有一个浮点数就执行浮点数的除法。所以为了有效的使用内存,就把内存划分成为一个个小的内存单元,每个内存单元都有一个编号,大小是1个字节。
2025-03-29 13:45:41
311
原创 初识C语言第三天
static 修饰局部变量的时候,局部变量出了作用域,不销毁,本质上,static修饰局部变量的时候,改变了变量的存储位置的。内存 //内存搭配(CPU - 中央处理器),但是后面跟不上了,使用寄存器快些。这个全局变量的外部属性就变成了内部链接属性,其他源文件(.c文件)就不能再使用到这个全局变量了。//自动变量,所有局部变量都会被自动销毁,所以省略。但是被static修饰的时候,外部链接属性就变成了内部链接属性,其他源文件就无法使用。
2025-03-28 18:30:02
401
原创 初识C语言第二天
/ / 除号两端都是整数的时候,执行的是整数除法,如果两端只要有一个浮点数就执行浮点数的除法。//()就是函数调用操作符,add,2,3都是()的操作数。//[]就是下标引用操作符,arr和3就是[]的操作数。//取整,强制类型转换,类型在前。//前置++,先++,后使用,a,b=11。int b = 20;//,a和b都为非0,都为真。if (a && b) //a和b都为真打印hehe。//后置++,先使用,后++
2025-03-27 19:50:46
238
原创 初识C语言
/ 4 C语言规定:sizeof(long)>=sizeof(int)scanf("%d %d", &num1, &num2);//在源文件的第一行加#define _CRT_SECURE_NO_WARNINGS。标准的主函数的写法,main函数是程序的入口,有且仅有一个。浮点数的四舍五入,不能用你肉眼看的数值来计算!
2025-03-26 21:15:29
282
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人