C语言
文章平均质量分 62
qianxuedegushi
这个作者很懒,什么都没留下…
展开
-
Linux C函数关于scrcpy(),sizeof(),fread(),fwrite(),mallloc() 的使用小结
关于fread(),fwrite(), sizeof(), mallloc() 的使用小结关于sizeof()的使用小结:转自:C语言基础——sizeof的用法总结https://blog.csdn.net/u013812502/article/details/81198452sizeof是C语言中保留关键字,也可以认为是一种运算符,单目运算符。常见的使用方式:int a=10;int arr=[1,2,3];char str[]="hello";int len_a = si.原创 2020-12-08 18:51:26 · 454 阅读 · 0 评论 -
C语言++i 与i++ 详解
i++;++i;就C语言代码来看,i++ 和 ++i 都只有一行,看起来似乎二者的执行效率一样了?其实不是的,在学习C语言时,教材和老师一般都会强调 i++ 和 ++i 的区别,例如下面这段C语言代码:int i , j, k;i = 0;j = i++;i = 0;k = ++i;这段C语言代码执行后,j 和 k 的值并不相等:j 等于 0,k 等于 1。既然执行结果有差异,那么执行效率很有可能也是有差异的,事实的确如此。查看上述C语言代码对应的汇编代码,如下:C语言代码对应的汇编代码我使原创 2020-07-12 19:43:18 · 17013 阅读 · 0 评论 -
C语言--fgets
fgets函数功能为从指定的流中读取数据,每次读取一行。其原型为:char *fgets(char *str, int n, FILE *stream);从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。[1]中文名fgets外文名fgets功...转载 2019-12-30 15:58:36 · 787 阅读 · 0 评论 -
C语言--fseek()
int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset取值大于等于2*1024*1024*1024,即long的正数范围2G),则不改变stream指向的位置...转载 2019-12-30 14:47:44 · 1600 阅读 · 0 评论 -
C语言--atoi(x)
atoiatoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。int atoi(const char *nptr) 函数会扫描参数 nptr字符串,会跳过前面的空白字符(例如空格,tab缩进)等。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0[1]。特别注意,该函数要求被转换的字符串是按十进制数理解...转载 2019-12-30 13:26:15 · 265 阅读 · 0 评论 -
Linux C --strtok_r(x,x,x)
strtok_r()函数用于分割字符串。strtok_r是linux平台下的strtok函数的线程安全版。windows的string.h中并不包含它,windows下的对应安全函数为strtok_s。外文名strtok_r作用分割字符串含义str为要分解的字符串目录1函数原型 2应用函数原型编辑为char *strtok_r(c...转载 2019-12-30 13:20:28 · 145 阅读 · 0 评论 -
Linux C --read(x,x,x)
read()编辑讨论read()是一个计算机编程语言函数,会把参数fd所指的文件传送nbyte个字节到buf指针所指的内存中。若参数nbyte为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或无可读取的数据。错误返回-1,并将根据不同的错误原因适当的设置错误码。函数名read功 能从文件中读函数原型int read...转载 2019-12-30 10:57:33 · 255 阅读 · 0 评论 -
C函数--sscanf
sscanf 读取格式化的字符串中的数据。swscanf是 sscanf 的宽字符版本;swscanf 的参数是宽字符串。 swscanf不处理 Unicode 全角十六进制或"兼容性区"字符。 除此以外,swscanf 和 sscanf 的行为完全相同。[1]外文名sscanf类别C数据输入解释字符串中读进相符的数据参数宽字符串...转载 2019-12-30 10:03:10 · 139 阅读 · 0 评论 -
互斥锁pthread_mutex_init()函数
linux下为了多线程同步,通常用到锁的概念。posix下抽象了一个锁类型的结构:ptread_mutex_t。通过对该结构的操作,来判断资源是否可以访问。顾名思义,加锁(lock)后,别人就无法打开,只有当锁没有关闭(unlock)的时候才能访问资源。即对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线...转载 2019-12-27 19:06:43 · 398 阅读 · 0 评论 -
内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别
Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别: 我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free()。注意:动态申请的内存使用完后必须要释放,否则会造成内存泄漏,如果内存泄漏发生在内核空间,则会造成系统崩溃。 那么,在内核空间中如何申...转载 2019-11-21 11:31:21 · 486 阅读 · 0 评论 -
C语言 external和static
static用法:在C中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。1、定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。a.在全局区分配内存。b.如果没有初始化,其默认值为0.c.该变量在本文件内从定义开始到文件结束可见。2、定义局部静态变量:在局部变量前面加上关键字static,其特点如下:...转载 2019-10-16 12:41:44 · 389 阅读 · 0 评论 -
二进制补码运算
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。 补码运算: 正数补码是其原码 负数的补码为其数值位部分取反加一(符号位不变)负数X的补码 = |X|按位求反+1= X按拉求反(除符号位外)+1= 模 - |...原创 2019-08-03 16:04:00 · 6295 阅读 · 2 评论 -
c语言 位域 unsigned char:1
位域 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字...转载 2019-06-05 18:51:43 · 6450 阅读 · 0 评论 -
const关键字
const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。const关键字的作用主要有以下几点:(1)可以定义const常量,具有不可变性。 例如:const int Max=100; int Array[Max];(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如: void f(const int i) { .........} 编译器就会知...转载 2019-05-14 14:59:04 · 335 阅读 · 0 评论 -
堆内存与栈内存
在学习C程序设计语言时,会遇到两个很相似的术语:堆内存和栈内存。这两个术语虽然只有一字之差,但是所表达的意义还是有差别的,堆内存和栈内存的区别可以用如下的比喻来看出:使用堆内存就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。使用栈内存就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工...转载 2019-05-14 14:42:33 · 140 阅读 · 0 评论 -
C语言 基本语法概念解析
1. “ 条件编译”命令允许对程序中的内容选择性地编译,即可以根据一定的条件选择是否编译。条件编译的命令主要有以下几种 :形式1#ifndef标识符程序段1#else程序段 2#endif它的作用是当 “ 标识符”没有由# define定义过了。则编译“ 程序段 1 ” 。 否则编译“ 程序段 2 ” 。其中如果不需要编译“ 程序段 2 ”。则上...原创 2019-04-20 16:26:25 · 623 阅读 · 0 评论 -
C语言编写简单图像程序-圆
生成图像格式:PPMPPM图片格式介绍:A Netpbm format is any graphics format used and defined by the Netpbm project. The portable pixmap format (PPM), the portable graymap format (PGM) and the portable bitm原创 2018-01-12 18:54:53 · 4340 阅读 · 0 评论 -
C语言编写简单图像程序-太极阴阳图
#include #include #include #include typedef struct { size_t width; size_t height; unsigned char *data;} Image;static Image *image原创 2018-01-16 13:12:14 · 11513 阅读 · 4 评论 -
动态链接和静态链接差异
开始上课了,现在非周末的时间会稍微少点,这次想写的是关于静态链接和动态链接的区别,刚开始接触的时候还是有一点点的疑惑滴,这里比较一下来加深记忆.我们在前面的博客里面写过关于.c文件从编译到链接然后到生成可执行文件的过程.通常情况下,对函数库的链接是放在编译期完成的.所有相关的对象文件与涉及到的函数库被链接为一个可执行文件.程序在运行的时候,与函数库再无瓜葛,因为所有我们需要的函数都已经被放在我转载 2018-01-10 16:10:51 · 495 阅读 · 0 评论 -
C语言- 存储类说明符(storage class specifier):typedef
typedef是在计算机编程语言中用来为复杂的声明定义简单的别名,与宏定义有些差异。它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。 使用typedef为现有类型创建别名,定义易于记忆的类型名1typedef int size;转载 2018-02-06 14:05:21 · 1067 阅读 · 0 评论 -
C语言 位域
C 结构体位域位域 : 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同...转载 2018-05-22 16:00:38 · 160 阅读 · 0 评论 -
volatile
volatile是一个类型修饰符(type specifier),就像大家更熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量。volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。目录1 作用2 例子3 使用地方4 代码5 正确使用6 使用方...转载 2018-05-23 11:10:44 · 177 阅读 · 0 评论 -
likely() && unlikely() && __builtin_expect((x), 1)
在Linux2.6内核中,看到一对奇怪的函数,likely(), unlikely()。追踪回去,发现其实是一对宏,如下实现:#define likely(x) __builtin_expect((x), 1)#define unlikely(x) __builtin_expect((x), 0)查了一下是这样说的:例如: if( likely(val)) if( ...转载 2018-08-10 13:58:59 · 299 阅读 · 0 评论 -
C语言指针变量加下标的作用意思意义
指针,是一个数据类型。指针变量用于存储内存的绝对地址。相当于起始地址从0开始。指针变量中可以更改值,也就是更改了指向的内存地址。指针就是这个作用。而指针经常与下标配合使用,形同数组。这才让很多人把数组与指针混淆了。而指针变量加上下标,代表的意义就是:指针中的值就是起始地址,下标则是从指针中存储的地址作为起始地址开始偏移的。只不过,指针变量的值可以改变,因此表示起始地址是可以改变的。而...原创 2018-08-15 10:04:40 · 7769 阅读 · 1 评论 -
linux(kernel)位操作
#define BIT(nr) (1UL << (nr))#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG))#define BIT_WORD(nr) ((nr) / BITS_PER_LONG) #define BITS_PER_LONG 32 test_bit:测试相应地址的nr位是否为1....转载 2018-08-15 10:36:17 · 2043 阅读 · 1 评论 -
C语言指针详解
前言这不是我第一次写关于C指针的文章了,只是因为指针对于C来说太重要,而且随着自己编程经历越多,对指针的理解越多,因此有了本文。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识。所以我想通过一篇文章来尽可能的讲解指针,以对得起这个文章的标题吧。 为什么需要指针?指针解决了一些编程中基本的问题。第一,指针的使用使得不同区...转载 2018-08-15 18:55:29 · 229 阅读 · 0 评论 -
[Linux Input]BITS_TO_LONGS的解释及相关操作函数
宏BITS_TO_LONGS #define BITS_PER_BYTE 8 #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) sizeof(long) = ...转载 2018-08-16 09:32:03 · 285 阅读 · 0 评论 -
负数为什么用补码表示&补码定义
(转自 https://blog.csdn.net/leonliu06/article/details/78685197)文首 我们都知道负数在计算机中是以补码(忘了补码定义的戳这里)表示的,那为什么呢?本文尝试了解补码的原理,而要想理解它,首先得理解算术中“模”的概念。所以首先看一下什么是模,然后通过一个小例子来理解补码。1 符号位 C语言规定,把内存的最高位作为符号位,且用...转载 2018-08-31 11:04:48 · 6180 阅读 · 0 评论 -
C语言 void类型
void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。中文翻译为“无类型”。常用在程序编写中对定义函数的参数类型、返回值、函数中指针类型进行声明。void几乎只有“注释”和限制程序的作用,定义一个void变量没有意义,不妨试着定义:void a;这行语句编译时会出错,提示“illegal use of type 'void'”。不过,即使void...原创 2019-04-20 16:19:18 · 550 阅读 · 0 评论 -
C语言中的结构体
格式:struct 结构体标识名 {类型名1 结构成员表1; 类型名2 结构成员表2; ……类型名n 结构成员表n; }; 注意:struct是关键字,是结构体类型的标志。“结构体标识名”和“结构体成员名”都是用户定义的标识符,“结构体标识名”是可选项,在说明中可以不出现。每个“结构成员表”中都可以含有多个同类型的成员名,原创 2017-06-09 14:06:50 · 762 阅读 · 0 评论