《C语言》
C语言
专业代码搬运
什么简介
展开
-
NULL和0的区别
一、什么是空指针常量(null pointer constant)? [6.3.2.3-3] An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.这里告诉我们:0、0L、'\0'、3 - 3、0原创 2017-06-26 00:27:16 · 9857 阅读 · 0 评论 -
C语言中什么技术可以代替宏定义
inline,内联函数,==以代码体积变大为代价,可减少函数调用的开销,需注意内联是不可重入的(自己再调用自己)==。与带参宏定义相比,inline函数具备以下优点: - 参数类型检查:宏定义中所使用的参数仅仅是在宏定义中被替换,不进行任何的类型检查 - 返回值:宏定义中无法使用return返回 - 便于调试...原创 2018-05-24 00:59:18 · 1372 阅读 · 0 评论 -
字符串与字符数组的区别
首先需要先了解\0的概念。\0的概念\0是c语言中的字符串结束符,在ASCII字符集中对应空字符NULL,它虽然不计入串长,==但要占内存空间!==可见\0是作为字符串结尾的一个标识符,也即当编译器碰到\0时才会认为到达了这个字符串的结尾,==如果一直没碰到\0,编译器就一直找一直找,直到找到一个\0为止!==字符串的概念首先从内存角度上来看,字符串就是一段连续的内存,但该段内存中的内容符合如下两个原创 2016-11-03 22:55:23 · 1758 阅读 · 0 评论 -
Function pointer - 函数指针
英文: Function pointer 中文: 函数指针 介绍: 函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,但这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型原创 2016-11-25 23:34:29 · 1747 阅读 · 0 评论 -
Pointer function - 指针函数
英文: Pointer function 中文: 指针函数 介绍: 是指带指针的函数,==即本质是一个函数==。函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。例:int *Func();该函数返回一个int *,也即返回一个int的地址,所以该函数是一个指针函数,指针函数只是说明该函数的返回值为一个指针而已。原创 2016-11-25 23:35:21 · 802 阅读 · 0 评论 -
C语言中的stdbool.h头文件
Win7下安装的VS2015中的stdbool.h的位置为: F:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\includestdbool.h的文件内容为://// stdbool.h//// Copyright (c) Microsoft Corporation. All rights reserved.////原创 2016-11-25 23:36:24 · 37011 阅读 · 0 评论 -
三类语句后面不能加分号“;”
C语言中只有如下三类语句后面不用加分号“;”预处理命令后面#include <stdio.h> /* 不加分号 */#define a 1 /* 不加分号 */函数头后面int a(void) /* 不加分号 */{ return;}花括号“{”和“}”后面int a(void) {/* 不加分号 */ return;原创 2016-11-25 23:37:41 · 12410 阅读 · 12 评论 -
sprintf将数字转为字符串,或格式化字符串
当将数字转字符串的itoa函数不可用时,==可以使用sprintf函数==,可达到一样的效果,且移植性更强,同时也可以使用sprintf函数来格式化字符串,功能强大。例:sprintf(*p, "%d", num); //将num转为字符串输入到 p 中这里也可以形象的理解为是先将num用printf打印(在屏幕上输出后肯定就是一个一个的字符了),然后再将屏幕上的输出结果再输入进相应的字符串中。按上原创 2016-11-25 23:38:41 · 18605 阅读 · 1 评论 -
验证负数以补码形式存储
已知: 1. 负数的补码等于它的反码加1,即在其反码的最低位加1就为该数的补码 2. 该系统中int型占4字节(32位二进制),char型占1字节(8位二进制) 3. 字符在内存中以ASCII形式存储(A的为65,C为67) 4. 在内存中低地址存低位值,高地址存高位值先定义一个int型负数:如:int i= - 48829可知其相应的原码、反码和补码如下所示:原码:10原创 2016-11-25 23:39:43 · 709 阅读 · 0 评论 -
为什么需要字节对齐
概念 在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然边界(alignment)分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。为了使CPU能够对变量进行快速的访问,变量的起始地址应该具有原创 2016-12-04 16:37:27 · 5675 阅读 · 3 评论 -
sizeof - 计算对象所占字节
sizeof是一个==运算符==,而不是函数,它的功能是:==获得保证能容纳实现所建立的最大对象的字节大小。==另外sizeof所计算出的对象字节大小是在==编译时即计算好了==,参数可以是数组、指针、类型、对象、函数等,==由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小==。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,==返回值跟对象、结构、数原创 2016-12-04 16:39:05 · 3163 阅读 · 0 评论 -
kmalloc - 内存申请
原型: void *kmalloc(size_t size, int flags) 功能: 在设备驱动程序或者内核模块中动态开辟内存,不是用malloc,而是kmalloc、vmalloc,或者用get_free_pages直接申请页,释放内存用的是kfree、vfree或free_pages。kmalloc函数返回的是虚拟地址(线性地址),kmalloc特殊之处在于它分配的内存是物理上连续的,这原创 2016-12-04 16:39:55 · 3981 阅读 · 0 评论 -
malloc后是否判断返回值为null?
在malloc后判断返回值是否是null的,纯属“用心不是地方”,假如是null,你怎么做? 写出高质量的软件(特别是工业软件),不判断malloc返回值是不负责任的。,==在任何时候,你能检测到问题,但却置于不顾都是不负责任的。==你必须在任何时候尽量保证你的软件控制的设备处于一种安全的状态,第一次malloc失败还远远没到完全没有办法的时候。举个例子,你的软件在控制一架电梯(只是举例,实际上,在原创 2016-12-04 17:06:57 · 9145 阅读 · 0 评论 -
mq - 消息队列
英文: Message queue 中文: 消息队列 介绍: 消息队列是在消息的==传输过程中保存消息的容器==,如名字所示,本质就是一个队列,关键是队列中的元素为“消息”。消息队列首先肯定符合对列“先进先出”的特性,但也不完全符合,例如会根据不同消息的优先级对消息在队列中的顺序做调整,高优先级的消息会放置队列头优先处理。消息队列也就相当于是一个缓冲区,一边可以不断将各种消息往消息队列中送,另一原创 2016-12-05 23:48:39 · 501 阅读 · 0 评论 -
指针使用%p输出,区分%x与%p的区别?
几年前写的一个模块,前几天准备把它拿出来编译成64位的版本使用,因为对于windows的API一直是按照参数微软文档给出的原型进行调用,也没有指针到整数的强转,因此整个编译几乎没遇到问题,直接生成64位版本,但是测试时发现一个问题,所有的运行log输出的地址值都不对,64位系统下log里记录的还是32位的地址值,显然是被截断的地址值。看了一下代码,原来所有指针的格式化用的都是”%x”,真是欲哭无泪,原创 2017-04-11 00:24:17 · 14872 阅读 · 6 评论 -
2017.07.19《编写高质量代码:改善C程序代码的125个建议》
神书,讲解了C语言很多细节的地方,也是很多容易出错的地方,但还是需要一定的基础才能较好阅读的,对C语言的深入学习很有作用,来回读了2遍。原创 2017-07-19 01:02:08 · 1605 阅读 · 0 评论