- 博客(20)
- 问答 (19)
- 收藏
- 关注
原创 关于宏定义
以下是两个宏定义的方程式我们在宏定义的过程中一定不要吝色括号,因为宏定义是强制替换,可能会导致一些优先级的问题首先是交换二进制的奇数位和偶数维#define SWAP(n) ((n & (0xAAAAAAAA)) >> 1) | ((n & (0x55555555)) << 1)int main() { printf("%d", SWAP(170));}这里的思路是把这个二进制的奇数位和偶数位都提取出来,分别是AAAAAAAA 和 555...
2022-03-08 12:31:01
146
原创 关于sprintf 和 sscanf
sprintf函数的格式:int sprintf( char *buffer, const char *format [, argument,…] );sprintf和平时我们常用的printf函数的功能很相似。sprintf函数打印到字符串中(要注意字符串的长度要足够容纳打印的内容,否则会出现内存溢出),而printf函数打印输出到屏幕上。sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用广泛。以下是printf的格式int printf ( const char * fo
2022-02-22 15:21:44
412
原创 realloc calloc 和 malloc
void *malloc(size_t size);void *calloc(size_t nmemb, size_t size);void *realloc(void *ptr, size_t size);首先是malloc,其原理是向堆区申请一块内存,如果分配成功:则返回指向被分配内存空间的指针不然,返回空指针NULL。而calloc则是在malloc的基础上对其分配的内存进行了初始化(一般都是0)而realloc则是在malloc的基础上增加了调整其内存空间大小...
2022-02-17 10:00:00
160
原创 关于动态内存
比之前用静态内存的好处是动态占用内存更少,基本上就是你想分配多少内存用realloc分配多少就行了,不会像之前可能一个int数组初始化了1000个,结果就用了50个不到。动态内存虽然比静态内存要复杂,但掌握了后确实挺方便的,一般是先用malloc 或者 calloc 开辟内存。个人比较喜欢malloc,因为calloc是把内存开辟完后直接赋值0了。可是很多时候并不是所有的数据都要被赋值0的,我更喜欢malloc之后对需要的数据一个个赋值,这样以后如果要改的话也更容易点。而在之后,因为我们一般ma
2022-02-16 16:48:49
389
原创 memcpy 和 memmove 和 strcpy的区别
首先从字面就能理解memcpy 和 memmove 是跟内存相关的,而strcpy是跟字符串相关那么首先。memcpy原型如下extern void *memcpy(void *dest, void *src, unsigned int count);memcpy 函数用于 把资源内存(src所指向的内存区域) 拷贝到目标内存(dest所指向的内存区域);而char *strcpy(char *dest, const char *src)虽然也是用于 把资源内存(src所指向的
2022-02-16 13:24:02
1400
原创 宏替换和去注释的问题
由于在预处理中,计算机是先进行去注释再宏替换的,所以在运行如下代码时#include<stdio.h>#define abc //int main() { abc printf("haha\n");return 0;}才不会打印haha。
2021-12-10 15:36:05
532
原创 取模和取余的区别
注意了,除了python是取模,c,c++,c#,java等都是取余。取余和取模在大于0时没有区别,比如,10 / 3 = 3;10%3 = 1;但是当数小于0时,就有区别了,一般来说,绝对值abs(取模的商)会比abs(取余的)大。在绝对值了之后,取模的商*除数是要大于被除数的,而取余的商*除数要小于被除数。如 -10 % 3 = 1;-10 / 3 = -3是取余。而 -10 % 3 = 2;-10 / 3 = -4是取模。...
2021-12-09 18:21:17
1060
原创 continue 对于 while 和 for 循环的区别
//int main() {// for (int i = 0; i < 10; i++) {// printf("continue befor : %d\n", i);// if (i == 5) {// printf("%d\n", i);// continue;// }// printf("continue after : %d\n", i);// }//}int ...
2021-12-02 21:57:38
843
原创 键盘被称为字符设备的原因
int main() { while (1) { int ch = getchar(); printf("%c ", ch); }}如图所示,ch为int类型,打出的却和输入一样,为字符类型,所以我们在显示屏上所看到的时字符型,c语言有三个输出流,stdin,stdout,和stderror,这三个输出流让系统在内部就打开了文件,不用我们自己动手打开了,这也是为什么我们不用运行exe这样的文件也能运行这个程序。而stdout输出在屏幕上的时...
2021-12-02 16:21:14
716
原创 关于getchar为啥是int类型
如果是char 类型就无法 表示获取失败了!getchar()函数用于读取字符,但它返回的是一个int型值,而不是char型值。 尽管表示字符的代码本身是不是int型值,但返回int型值的原因是为了允许函数报告文件的末尾(EOF)。 如果返回值是char型,那么在256个字符中必须有一个被指定用于表示EOF。-1char类型读不到...
2021-12-02 16:09:39
1450
原创 2021-11-28 c语言全方位补习
gets 和 scanf都是以'\0'结束,但不同的是gets的字符串可以带空格,scanf不行,scanf要用在字符串要么就加数组,要么就scanf("%[^\n]%*c", arr);这么写。其次,用数组写字符串的时候可以%s一次性全部输出,也可以%c遍历一次次输出。被static字段修饰的变量,在整个程序运行阶段只会被定义一次...
2021-11-28 15:41:49
512
原创 2021-11-26 float 和int 的原反补
int main() { int number = 9; printf("%d\n", number); float* n = (float*)number; printf("%f\n", n); printf("%d\n", n); return 0;}同样是打印float n ,以整形的形式打印出来和以浮点型的形式打印出来却截然不同,这就要涉及到数据在内存中储存的问题了。首先我们来看int number 和 float n 的原反补:...
2021-11-26 13:07:00
213
原创 2021-11-23 数组名
int arr[20];arr是首地址名,相当于指针,这时不能再加&取地址符,不然就成了首地址的地址了。正确表达:int main() { int arr[20] = {0}; int* p = arr; printf("%d ", *p);}注意,当printf时应选择用*p而不是p,这是因为*是解引用操作符,*p指向的对象是arr,数组的首地址,而p指向的是一个随机值,因为我们并没有给它赋值过(并且不能直接给p赋值)。可以通过改变*p来改变数组的首地址...
2021-11-23 22:31:47
223
原创 指针与类型问题
#include <stdio.h>int main(){int arr[] = {1,2,3,4,5};short *p = (short*)arr;int i = 0;for(i=0; i<4; i++){*(p+i) = 0;}for(i=0; i<5; i++){printf("%d ", arr[i]);}return 0;}这么一窜代码,它的输出确实0 0 3 4 5 ,因...
2021-11-17 13:09:11
50
原创 2021-10-28 2021-10-26的问题纠正
#include <stdio.h>#include <string.h>#define max 9int main() { int a, b, c; int number = scanf("%d%d%d", &a, &b, &c); printf("%d", number); return 0;}可以看到输出的scanf的赋给number的值是根据scanf中有几个数被赋值而变得。如图中有三个值,则scanf的总值就为3,把3..
2021-10-28 21:00:17
59
原创 2021.10.27 随笔,sizeof(arr)的问题
请看如下代码:今天在写求十个数中最大值的问题,我用了遍历的方法,但出现了如下问题。#include <stdio.h>#include <string.h>int main() { int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int number = sizeof(arr); int max = arr[0]; printf("%d\n", number); for (int i = 1; i < nu
2021-10-27 17:46:49
225
原创 2021-10-26 随笔 scanf 的赋值问题
大家好,在今天写代码的过程中,本人想省略行数,于是把下列函数进行了修改:#include <stdio.h>int main() { int a; scanf("%d", &a); printf("%d", a); return 0;}我把它进行了调整,变成了以下代码#include <stdio.h>int main() { int a = scanf("%d", &a); print
2021-10-26 22:16:25
1188
原创 我的第一篇博客
大家好,我是小丁,一名平平无奇的大一学生。处于对未来的 规划,我就从今天,也就是2021/10/26真正开始了我的c语言之旅。我的目标是,在未来的一年内,学穿c/c++,有空再去学学java。我知道这很困难,但是既然我已经决定了,怎么着也要学下去。知识点很重要,知识点的运用更重要,所以我的计划是运用平时的碎片时间去刷题,看讲解,然后跟着我自己的节奏走,怎么说也要每周学满个5天吧。对于国内公司,我比较想进腾讯,bilibili,字节和阿里云。没有为什么,就是喜欢。...
2021-10-26 12:53:11
57
空空如也
能帮我改改二叉树的LNR顺序递归吗
2021-10-07
结构中递归的问题(单链表)
2021-09-20
关于单链表中按大小从小到大重新排序失败的问题。填一个空
2021-09-17
c语言数组问题 求解为什么运行错误
2021-08-18
c语言关于结构的编写错误
2021-08-09
求解编写错误:从后往前数,找到第n个元素
2021-08-08
提问,输入一个数,在单链表中删除第一个与数相同的元素
2021-07-31
单链表中的插入一个元素问题
2021-07-30
单链表递增问题,能不能帮我找找哪有问题
2021-07-30
能帮我写的代码改改吗
2021-07-22
怎么用ctype.h 和 argc,argv 来 以小写形式打印命令行参数
2021-07-20
求帮我编个扫雷的游戏模式
2021-07-11
求编写扫雷的排雷问题
2021-07-09
扫雷问题,输入的坐标0
2021-07-08
scanf检测问题,谁能帮我改改
2021-07-07
关于二维平面坐标相关的问题(运行错误)
2021-07-07
c语言中关于集合的小问题(求解)
2021-07-06
求各位更改一下扫雷的基础代码,我这个运行一直出错
2021-07-06
在数组array中计算 和 和 乘积
2021-06-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人