- 博客(43)
- 收藏
- 关注
原创 枚举和联合体
我们前面学过了判断大小端的方了那我们学了联合体后右有了一种新的判断大小端的方法union Unchar a;int b;un.b = 1;printf("小端");elseprintf("大端");return 0;我们先把b=1存放到联合体里面,这联合体大小是4,具体计算方法看上文下面均是16进制表示,一个方框代表一个字节空间大端存储00000001小端存储01000000但是当我们拿a的时候都是从 左边开始,如果拿出来的是01那就是小端存储,如果拿出来的是00。
2024-09-07 16:59:56
474
原创 结构体(4)
结构体传参第一点我们要知道的是,和函数相同,结构体的传参要在结构体声明前像上面这个函数,要把类型放到函数前面,要先有类型你再用函数的时候才能使用啊像下面这样使用就没问题了上面这串代码我是将结构体的值传过去了那么传指针呢?如上所示,好像传指针也可以!那么传值和传指针哪个好呢?我们传值相当于把数据拷贝一份过去,但是这是个结构体,相当于我要拷贝一个完整的结构体第一很浪费空间(结构体的大小一般比指针大)函数传参的时候,参数是需要压栈,会有时间和空间上的系统开销。如果传递一个结构体对象的时候;
2024-09-06 23:48:10
309
原创 结构体(3)
4.如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整教倍。最大对齐数是4,因此结构体大小需是对齐数的整数倍,此时结构体大小是9,因此最后要空3个格子去满足最后一个要求。3.结构体总大小为最大对齐数(结构体中每个成员变量都有一个对齐数,所有对齐数中最大的)的整数倍。结构体总大小为最大对齐数(结构体中每个成员变量都有一个对齐数,所有对齐数中最大的)的整数倍。因此c的偏移量刚好在b结束的地方,也就是偏移量为9。
2024-09-02 23:29:46
493
原创 结构体(2)
这样同样不行,对一个匿名结构体重命名,原理和上面一样,你都没有跑完,都没有重命名成功,就去使用重命名后的,编译器自然无法识别了(struct Node* next;我们发现上面两个struct类型都是没有名字的,也称为匿名结构体,创建这种匿名结构体只能如上图所示声明。这样写其实有一个问题就是每一个Node的结构体的大小是无穷无尽的,因为这样是无限嵌套的。你都没有跑完,都没有重命名成功,就去使用重命名后的,编译器自然无法识别了。因为指针的大小和它所指向的值是无关的,并且指针大小是确定的。
2024-09-01 22:10:45
367
原创 浮点数在内存中的存储
比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;这时,浮点数的指数E等于1-127(或者1-1023) 即为真实值,有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这时,浮点数的指数E等于1-127(或者1-1023) 即为真实值,有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。
2024-08-24 14:29:38
921
原创 整形提升
整型提升 (Integral Promotion)是指在计算机编程中,当不同类型的整数类型进行运算时,较小类型的整数会被自动转换为更大类型的整数,以确保运算的正确进行。整型提升的意义在于,CPU的运算器通常设计为以int类型的宽度进行数据操作,因此,为了确保运算的精度和效率,对于有符号的char和short类型,提升时在左端补得是最高位(符号位),正数补0,负数补1。故为这个是补码 1111 1111 1111 1111 1111 1111 1111 1010。截断成char类型1111 1010。
2024-08-23 22:23:54
447
原创 数据在内存中的存储
大端字节序和小端字节序是计算机内存中存储数据的两种不同方式,主要区别在于字节的排列顺序不同。大端字节序又称为大尾字节序,它将字面值的低位字节存放在内存的低地址处,而高位字节存放在高地址处。那么我们再思考一下,我们如何写一个代码去确定我们使用的到底是大端字节序储存还是小端字节序储存。它将字面值的低位字节存放在内存的高地址处,而高位字节存放在低地址处。在内存中,依次增加的地址对应的字节是高位字节。在内存中,依次增加的地址对应的字节是低位字节。定义 :小端字节序又称为小尾字节序,
2024-08-23 17:20:41
826
原创 内存函数
1.memcpy1.memcpy头文件:#include <sting.h>1.函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。2.这个函数在遇到'\0'的时候并不会停下来。(后面几个函数同理)3.如果source和destination有任何的重叠,复制的结果都是未定义的。4.对于内存重叠的地方交给memmove处理5.由于这个函数memcpy可以处理不同类型的数据,因此这个函数的参数类型是void*
2024-08-22 14:26:42
570
原创 字符函数和字符串函数(三)
功能:在str1中找str2这个字符串,第一次出现的位置如果找到了,就返回这个第一次出现的起始地址如果找不到,就返回NULL。strtok函数的第一个参数不为"NULL",函数将找到sth中第一个标记,strtok函数将保存它在字符串中的位置。· strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。· strtok函数找到str中的下一个标记,并将其用\0 结尾,返回一个指向这个标记的指针。如果字符串中不存在更多的标记,则返回 NULL 指针。
2024-08-21 23:55:21
213
原创 字符函数和字符串函数(二)
1.strcpy这个函数的功能是复制字符串将source指向的 C 字符串复制到指向destination的数组中,包括终止 \0 字符(并在该点处停止)。为避免溢出,destination指向的数组的大小应足够长,以包含与source相同的 C 字符串(包括终止 \0 字符),并且不应在内存中与source重叠。destination:指向要复制内容的目标数组的指针。source:指向要复制的 C 字符串的指针。返回值:返回 destination。
2024-08-21 16:29:06
1299
原创 C语言每日好题(3)
这个地方我们错的原因可能觉得strlen("abc")的结果是3,strlen("abcdef")的结果是6,3-6当然小于0;首先 strlen("abc")的结果是3,strlen("abcdef")的结果是6这一步是对的。当然如果大家想通过printf去打印strlen("abc")-strlen("abcdef")但是别忘了strlen的返回值是size_t,3和6都是size_t类型的。,因此相减也是size_t类型的,size_t是无符号类型。就不能用%d,得用%zu。
2024-08-18 19:13:26
317
2
原创 字符函数和字符串函数(一)
strcmp函数会从两个字符串的首地址开始,逐个比较它们对应位置的字符的ASCII码值,直到遇到不同的字符或者其中一个字符串结束。这里的 const char* 表示两个参数 str1 和 str2 都是指向字符的指针,并且这些字符都以空字符'\0'结尾。getchar 每次读取一个字符,如果用户输入多个字符,其余字符会保留在缓冲区中,供后续 getchar 调用读取。C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。正常情况下,返回用户输入的字符的 ASCII 码值。
2024-08-18 18:16:00
1059
原创 暑期数据结构 空间复杂度
空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。这个地方我们看箭头4和5,我们先执行函数Fib(3)使用完之后函数空间还给系统,但是执行Fib(4)本质上再开辟的那个空间还是和Fib(3)一样的。原因在于我们使用函数时会开辟一片空间,函数结束时会将那片空间还给系统 ,但是下次另一个函数使用时开辟的那个空间还是原来函数的。要计算Fib(N - 1)就要先算Fib(N - 2)+Fib(N -3 )要先计算Fib(N - 1)再计算Fib(N - 2);
2024-08-06 23:37:06
806
原创 暑期数据结构 时间复杂度
个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。但是实际中我们计算时间复杂度时,我们其实并不一定要计算精度的执行次数,而只需要大概执行次数,那么这里我们使用O的渐进表示法。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。比如说如果函数是F(N)=N*N+N+4,那么当N无限大的时候,对F(N)产生主要影响的是N*N。比如说如果函数是F(N)=N+4,那么当N无限大的时候,对F(N)产生主要影响的是N。
2024-08-06 13:23:20
568
原创 sizeof和strlen的区别
arr1:{'a','b','c'}是三个字符没有\0结尾,strlen函数是检测到\0才会停止,{'a','b','c'}中没有\0因此strlen会沿着arr1往后访问直到遇到\0才会停止,strlen(arr1)会越界访问,结果是未知的。但是sizeof才不会关心有没有\0呢,它只会关心这个数组所占内存大小是多少(单位:字节),arr1中刚好就存放了三个字符,所以大小是3。3.关注内存中是否有\0,如果没有\0,就会持续往后找,可能会越界。{'a','b','c'}和{“abc”} 的区别在哪?
2024-08-02 16:38:10
294
原创 七夕表白代码 (含答疑)
具体操作如上:需要的资源我放到下面了,有不会的有问题的,可以评论区留言,会免费答疑。MessageBox.Show("就像无论发生什么事我都会在你身边\n");MessageBox.Show("无论天空如何阴霾,太阳都在这里\n");MessageBox.Show("这是我们在一起的第一个七夕节\n");MessageBox.Show("思绪万千,兜兜转转还是你\n");MessageBox.Show("果然如我所料,你会喜欢的\n");不会的可以评论区留言,可以免费远程操作帮忙。但是如果你想改成表白的。
2024-08-02 15:52:24
544
原创 回调函数和qsort,strcmp函数
strcmp函数会从两个字符串的首地址开始,逐个比较它们对应位置的字符的ASCII码值,直到遇到不同的字符或者其中一个字符串结束。如果两个字符串相同,函数返回0;如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。我们自己写的比较原则的函数类型必须是int (*compar)(const void*,const void*)
2024-08-01 18:34:42
927
原创 函数指针变量
确实打印出来了地址,所以函数是有地址的,函数名就是函数的地址,当然也可以通过&函数名的方式获得函数的地址。如果我们要将函数的地址存放起来,就得创建函数指针变量咯,函数指针变量的写法其实和数组指针非常类似。函数指针变量应该是用来存放函数地址的,未来通过地址能够调用函数的。那么pr1会先和后面的结合,调用函数,再对函数的返回值进行*(int a)说明pr2指向函数的参数类型和参数个数。int是pr2指向函数的返回类型。1.函数指针变量的创建。2.函数指针变量的使用。以上函数指针变量的用法,
2024-07-26 19:16:43
302
原创 字符指针专题
(2)字符指针指向的是常量字符串,被指向的字符是不可被修改的,因此*a='f';是错误的,会使程序出问题,因此我们不希望这个常量字符串被修改,因此加个const会更安全,比如const char* a = "hello ly";是不可以的,a是char*类型,只能访问一个字节,因此只能打印一个字符,而无法打印整个字符串。以上就是本期的全部知识点,最近几章感觉都写的好短,主要是这些单个知识点东西确实不多。(4)打印字符串时,只需要提供字符串首元素地址就可以了。
2024-07-26 00:10:17
183
原创 指针数组和数组指针
这个地方是指针数组,只要数组元素是地址即可,也可以是数组的地址或者是指针的地址,这个地方我们把几个维数组的地址放到一个指针数组中可以模拟二维数组。后面会将指针的知识点一起出几期每日好题,你就会知道什么是痛苦了。本质上指针数组这个知识点单独并不是很难,总的知识点基本就这些了。当然各位有兴趣也可以去试试用指针数组模拟三维数组可不可以。我么可以通过对指针数组简引用得到指针数组元素所指向的值。指针数组,是数组,但是它的元素都是指针。那就是用指针数组去模拟二维数组。以上图片来自于比特鹏哥。但这可能听起来很无趣。
2024-07-25 23:14:05
167
原创 多维数组传参本质
如上图,arr[3][2]是二维数组,void exam(int arr[][2])中的arr[][2]可以替换成什么呢?但也因我们传的地址指向的空间大小必须明确,所以多维数组的第一个[]可以不明确,但是其他的[]必须明确。由图知,三维数组的传参本质上还是传的数组指针,因此多维数组传的也是数组指针,第一个[]代表指针可以不明确,而其他的[]代表指针指向数组的大小必须明确,由5,9,10知int[ ][ ]中第二个[ ]的值无论取什么都可以,由2,3,4知int*[ ]中的[ ]中的值无论取什么都可行。
2024-07-25 18:53:12
483
原创 一维数组传参本质
这个地方我们传参本质并没有传整个数组,而是将数组首元素的地址传进去了,但是因为本次编译用的是x64的环境所以地址的大小是8个字节,而int类型的元素大小是四个字节,因此sz2=sizeof(arr) / sizeof(arr[0])=2。首先我们来看s1,sizeof(arr)是数组的大小及6个元素大小之和,sizeof(arr[0])是一个数组大小,一除当然是6了。这里的数组名表示整个数组,计算的是整个的大小,单位是字节。这里的数组名也表示整个数组,取出的是整个数组的地址。其实数组名是数组首元素的地址~
2024-07-25 15:51:27
409
原创 两个好用的宏 assert和typedef
如果该表达式为假(返回值为零),assert()就会报错,在标准错误流stderr中写入一条错误信息,显示没有通过的表达式,以及包含这个表达式的文件名和行号。assert()的使用对程序员是非常友好的,使用assert()有几个好处:它不仅能自动标识文件和出问题的行号,还有一种无需更改代码就能开启或关闭assert()的机制。一般我们可以在Debug 中使用,在Release版本中选择禁用 assert 就行,在 VS 这样的集成开发环境中,在Release版本中,直接就是优化掉了。
2024-07-24 23:30:44
213
原创 野指针专题
像上图中这个例子, 通过指针访问了arr[6],但是本质上arr6个元素分别是arr[0]~arr[5],压根不存在arr[6],因此通过指针访问arr[6]是非法访问,所以我们通过指针访问arr[6]得到的值是随机的,如上图所示。如上图所示,我们指针原本指向函数内局部变量n,但是由于函数结束后局部变量n被回收了,因此这时指针将无法指向原先的n,通过指针访问会造成非法访问,从而指向一处未知的空间。NULL是C语言中定义的一个标识符常量,值是0,0也是地址,但是这个地址是无法使用的,读写该地址会报错。
2024-07-24 22:58:40
773
原创 暑期C++ printf和scanf的平替
当然c语言的printf和scanf在C++也是兼容的,你觉得哪个方便就使用哪个。然后根据我们命名空间的知识可知这个地方如果我们要使用必须先展开。比如std::cout
2024-07-24 16:45:21
354
原创 暑期C++ 缺省参数
缺省参数是是声明或定义参数时为函数的参数指定一个缺省值。在调用该函数值时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。部分缺省也是有顺序的,我们思考一下,既然传参是从左往右传参的,那么我们缺省是从哪到哪呢?(2)传参当没有参数时就会使用缺省参数,但是print(1,,2);那么这个2是传给b的还是c的呢?因此半缺省是从右往左的,并且不可以指定缺省和传参。我们先来看一段错误的从左到右缺省的代码。亦或者是这个1是传给a的,2是传给b的。那么这个地方函数中的a=1。由于传参是从左到右的。
2024-07-24 15:15:39
213
原创 C语言每日好题(2)
这样显然是危险的,因此,C++在这个地方进行了改良,你会发现那个char*p=arr;问题就出在了char*只能访问一个字节空间,所以打印值的范围也在一个字节大小范围之内(-128~127),要记住指针类型一定要和数组类型一致,数组是int[]类型的,那么指针最好是int*类型的,不然容易出错。但是这个数组类型是int类型,也就是每个数组元素的大小是四个字节范围之内,这串代码遍历打印数组的结果是没有问题的,那么问题出在哪里了呢?当数组元素大小超过一个字节时,char*类型的指针打印就会出错。
2024-07-23 23:49:03
238
原创 指针在数组中的加减运算
但是要记住指针类型一定要和数组类型一致,数组是int[]类型的,那么指针最好是int*类型的,不然容易出错。但是要记住指针类型一定要和数组类型一致,数组是int[]类型的,那么指针最好是int*类型的,不然容易出错。指针减指针要确保:相减的两个指针要指向同一个数组或者空间,不然就算编译可以通过,计算的结果也是不可控的。数组本质上和指针是相似的,数组名是数组首元素的地址,我们也可以通过指针去访问数组,这个后面会放在。二维数组用指针访问非常麻烦,可以先看前面的数组与指针思考的类容,后面我也会去填这个坑的。
2024-07-23 23:08:47
193
原创 const专题
从上文我们看到没有一个const可以真正意义上让变量的值无法改变,我们总能有其他办法去改变变量的值,这在某些情况下是十分危险的,因此在C++中对cosnt的用法进行了一些该变,这个在后续中的C++笔记中后会补充,C学到这目前够了。此时const使代码无法改变指针所指向的变量,也无法通过指针改变 所指向变量的值。但是可以通过指针改变 所指向变量的值,或者直接改变变量的值。但是可以改变指针所指向的变量,或者直接改变变量的值。此时const使代码无法改变指针所指向的变量,最后老规矩以一张思维导图结尾。
2024-07-22 22:35:05
820
原创 暑期c++ 命名空间
它会现在局部域(当下的语句所处的域)中找a的值,然后再去全局域找值,那么如果全局域也没有值,它会不会去其他域找值呢?当然我们展开也就意味着会有会出现变量重名的问题,也就是文章最初的问题,我展开后如果该域中的a变量变成了全局变量,全局域中也有一个变量a,且a的值还不一样,这样会导致报错。我们使用同一个变量或者函数时,会从局部局部域去寻找,再到全局域寻找,但是如果在局部域里面我想用全局域怎么办呢?比如ly::a就代表ly域中的a,::a就代表全局域的a,这样C++就避免了原先c的不足之处了。
2024-07-22 20:18:04
482
原创 结构体(1)
我们学过了数组,我们可以把相同类型的数据放到一个数组里面,但是如果是不同类型的数据怎么办呢?比如我现在想去把一个人的名字,最喜欢的明星,年龄等等因素做成一个数组,怎么办呢,c为了解决这个问题,于是出现了结构体,当然结构体还有一种通过->方式打印值的方法,但是这个和指针相关,我将在下一讲去进行讲述。这样我就把这些数据集体打包放到一个名叫s1的struct类型里面去了。但是你想说我不想这样声明,我比较叛逆我不想按照顺序来初始化怎么办。我现在声明了创造一个Stu的结构体类型,它里面包含了。
2024-07-18 21:20:21
313
原创 C语言每日好题(1)
但是有一个严重的风险就是,我们知道每个数据类型的大小是有范围的,比如int能表示的值是-2147483648到2147483647但是可能a+b或者a-b的值不在范围内,从而导致交换失败。-3补码 1111 1111 1111 1111 1111 1111 1111 1101。0的补码 0000 0000 0000 0000 0000 0000 0000 0000。(把第一个式子代入得,b=a^b^b=b^b^a=0^a=a)(把第二个式子带入得,a=a^b=a^b^a=a^a^b=b。
2024-07-17 21:02:20
312
原创 位操作符 & ^ | ~
a的补码 0000 0000 0000 0000 0000 0000 0000 1011。a的补码 0000 0000 0000 0000 0000 0000 0000 0000。a的补码 0000 0000 0000 0000 0000 0000 0000 1011。a的补码 0000 0000 0000 0000 0000 0000 0000 1011。这四个操作符首先是争对补码进行运算的,其次这四个操作符的操作数必须是整数。
2024-07-16 17:03:24
490
原创 移位操作符 <<和>>
(2)但是第二点就有所不同了,右移操作符像右移动一位后,但是因为左边溢出被截断的位是符号位,就左边空出的符号位补0还是1出现了两种方式。(1) ,左移操作符是争对补码进行运算的,但是printf是对有符号十进制整数,因此中间我们要去换算。(2),左移操作符的作用效果是补码整体的二进制序列向左移一位,右边空的位补0;右移操作符是争对补码进行运算的,但是printf是对有符号十进制整数,因此中间我们要去换算。主要分为右移操作符,需要注意的是移位操作符的操作数只能是整数。
2024-07-15 21:08:40
594
原创 补码为什么比原码行,why
这个地方溢出的1被截断,而符号位为0,数值位为-b,这个时候代表的值还是-b,但是符号位变成0,变成正的了,这个地方就把负数和负数的符号位统一了,但是呢,由于数值位不能为负数,所以表示成256-b但是本质上1(256-b)和0(-b)代表的值相同。因此这个地方也就能解释为啥非负数原码反码补码相同,而负数却需要变化,原因是因为补码是把所有数的符号位全部变成0参与计算,从而避免符号位的影响,但是非负数的符号位本身就是0,所以非负数的原码反码补码都相同啊!因此 0(a-b)-----> 1(b-a)
2024-07-15 00:07:52
439
原创 原码补码反码。
我们上一章讲了十进制整数如何转换成原码,但是计算机内部储存计算的都是补码,为什么不用看起来更好换算的补码呢,因为计算机内部(cpu只有加法器)所以计算a-b这样的运算只能通过a+(-b)计算,这个时候如果用原码计算会出现很大的问题,符号位原本是作为表示正负的,一旦参与相加的计算,就会被当作值参与计算,这个时候就会出问题。所以0000 0000(补码)的原码也是0000 0000 及换算成十进制正数也就是0。1的补码 0000 0001(非负数的原码反码补码一样)非负数的原码补码反码都是一样的。
2024-07-14 23:19:43
141
原创 进制之间转换
但是上图反映出一个很简单的方法就是,以1234.75为例子,首先我们要找到这个数用二进制表示的最高位是多少,注意事项:16进制表示1到16是1,2,3,4,5,6,7,8,9,a,b,c,d,e,f。这个地方最后得出的结果刚好和我们正确结果一样,同理,转换成8进制16进制的方法也是一样的。我们计算常用是十进制,那么十进制如何转化成二进制八进制和16进制呢?以上是用word简单画了个图,由于博主word不是很好将就看一下就行。其次要注意小数点在0次方和-1次方之间,别忘了。之间的所有位)这两位都取0;
2024-07-14 01:19:38
152
原创 有符号十进制整数和原码的转换方式
首先我们要了解一件事,就是我们计算通常是用十进制进行运算的,但是计算机内部却是采用的是二进制数,因此当有符号十进制整数转化成二进制运算时,我们就需要注意一些事了。此处是以8位的二进制序列为例,原码的位数和机器字长有关,通常是字节数(8)的整倍,16位,32位同理,首位是符号位,其余都是数值位。首先就算我们要了解有符号十进制整数转化成二进制的二表示方式有三种,分别是。无符号十进制整数转化成原码全是数值位没有符号位。,这个数的值的大小是12,所以数值位就是。.其次这个数值的大小是9,所以数值位是。
2024-07-13 23:19:37
216
原创 为什么要学编程呢?
比如我前面文章的电子书模拟器以及高考祝福,就用我们自己的知识做出来了,真的感觉就是计算机给我一根魔法棒,我想变啥就变啥,当我的手触碰到键盘时真的感觉我像被套上一层buff一样,思如泉涌,我做一下午计算机的题我都不会感觉到累,包括博客也是一样。当然博主的学习都是网课学的,但是博主标注原创的文章的东西,都是博主根据学完的知识后,自己想去做几个好玩的东西而想出来的,有错误是难以避免的,欢迎大家指出。博主本人选的是c++方向,目前大一下学期,打算暑期学习linux,数据结构,c++,python.各学一点。
2024-06-07 23:48:39
239
原创 三个简单C语言函数实现高考祝福或表白(零基础)
快高考了,那么我们如何用我们学的C语言去做点好玩的是事呢,比如给学弟学妹们写祝福,或者帮他们把不敢说的话全部都说出来,想想都好玩兴奋,或者说你没啥c语言基础也可以学。当然如果你想一劳永逸你可以找博主花10元定制上面视频的那种,博主还附能给你提供如何告白,以及大一新生要避开哪些坑等大礼包。比如我们希望先打印,高考加油,乘风破浪,你一定能行,在屏幕上保留0.5秒,然后再清空屏幕,打印高考必胜。这样只要我们打印我们要的内容,再确定要保留的时间,再全屏清除就完工啦!printf("高考加油\n");
2024-06-07 22:40:30
500
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人