Welcome 微信登录

首页 / 软件开发 / C语言

C语言中结构体(struct)的位字段(:) 详解

C语言中结构体(struct)的位字段(:) 详解

C语言中结构体(struct)的位字段(:) 详解2015-01-20结构体(struct)可以使用位字段(:), 节省空间, 如以下代码,结构体a中的, 第一个变量x占用1个字符, y占用2个字符, z占用33个字符(越界);但是sizeof()会自动补齐, 如x+y一共占用4个字节, z占用8个字节, 所以结构体占用12个字节;当使用加法运算时, 会初始化为0;代码:/** test.cpp**Created on: 2014.05.23*Author...
C语言中printf的占位符(%) 异常

C语言中printf的占位符(%) 异常

C语言中printf的占位符(%) 异常2015-01-20C语言中, 使用%代表占位符的意思, 如%d代表int类型, %f代表float类型.需要注意的是, 占位符需要和使用参数匹配, 否则会出现越界或截断的情况;如%f, 匹配5, 会导致使用8个字节去匹配4个字节, 会产生越界, 输出0;%d, 匹配5.01, 会导致使用4个字节去匹配8个字节, 会产生截断, 输出一个大数;代码:/** test.cpp**Created on: 2014.05.2...
c语言实现SHA-1算法

c语言实现SHA-1算法

c语言实现SHA-1算法2015-01-20安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产...
如何使用C语言获取文件的SHA1哈希值

如何使用C语言获取文件的SHA1哈希值

如何使用C语言获取文件的SHA1哈希值2015-01-20安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那...
Objective-C内存管理之引用计数

Objective-C内存管理之引用计数

Objective-C内存管理之引用计数2015-02-23初学者在学习Objective-c的时候,很容易在内存管理这一部分陷入混乱状态,很大一部分原因是没有弄清楚引用计数的原理,搞不明白对象的引用数量,这样就当然无法彻底释放对象的内存了,苹果官方文档在内存管理这一部分说的非常简单,只有三条准则:当你使用new、alloc或copy方法创建一个对象时,该对象的保留指针为1,当不再使用该对象的时候,你应该想该对象发送一条release或autoreleas...
C语言:指针的长度和类型

C语言:指针的长度和类型

C语言:指针的长度和类型2015-02-23如果考虑应用程序的兼容性和可移植性,指针的长度就是一个问题,在大部分现代平台上,数据指针的长度通常是一样的,与指针类型无关,尽管C标准没有规定所有类型指针的长度相同,但是通常实际情况就是这样。但是函数指针长度可能与数据指针的长度不同。指针的长度取决于使用的机器和编译器,例如:在现代windows上,指针是32位或是64位长测试代码:#include<stdio.h>#include<math.h...
linux下生产者与消费者C实现

linux下生产者与消费者C实现

linux下生产者与消费者C实现2015-02-23最近做毕设涉及到了生产者与消费者模型,这个东东只在操作系统课程上有点印象,于是花了点时间看了下《unix环境高级编程 》的线程部分,在此记录一下。1.多线程的概念就不多说了,pthread.h头文件中包含的几个基本概念及函数:pthread_t————线程ID数据类型,线程ID只在它所属的进程环境中有效;int pthread_create(pthread_...
c编程中的堆与栈

c编程中的堆与栈

c编程中的堆与栈2015-02-23栈与系统的设计有关,由系统来管理。不过,程序员可以通过如new malloc语句在堆中获取内存。栈是向下生长的一块连续的内存区域。栈的大小是系统设置好的。堆是向上生长,不连续的内存区域。因为操作系统是用链表来管理内存的。堆的大小受系统有效虚拟内存的限制。栈: 在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令的地址,然后是函数的各个参数,注意静态变量是不入栈的。当本次函数调用结束后,局部变量先出栈,然后是参数,最...
do {...} while (0) 的常见用途

do {...} while (0) 的常见用途

do {...} while (0) 的常见用途2015-02-23在一些Linux内核和其它的开源代码中,我们经常看到像下面这样的代码:do{ ...}while(0)该代码片段并非循环,这样想想似乎使用do…while没有任何意义,那么为什么还要使用它呢?实际上,do{...}while(0)的用途并不仅仅是优化你的代码。经过一系列的调研和探索,我们总结出它的一些用途如下。1. 帮助定义复杂的宏以避免错误详细解释请看“do {...
do {...} while (0) 在宏定义中的作用

do {...} while (0) 在宏定义中的作用

do {...} while (0) 在宏定义中的作用2015-02-23如果你是一名C程序员,你肯定很熟悉宏,它们非常强大,如果正确使用可以让你的工作事半功倍。然而,如果你在定义宏时很随意没有认真检查,那么它们可能使你发狂,浪费N多时间。在很多的C程序中,你可能会看到许多看起来不是那么直接的较特殊的宏定义。下面就是一个例子:#define __set_task_state(tsk, state_value) do{ (tsk)->state = ...
linux下C语言学习:通过几个实例温习指针

linux下C语言学习:通过几个实例温习指针

linux下C语言学习:通过几个实例温习指针2015-02-23作为新手,起初玩vim还是蛮痛苦的。不过慢慢尝到甜头后也很难放下了。本篇带一样很久没玩c的同学温故下指针。step 1直接上图了这里我们定义一个二维数组int a[2][5] = {1,3,5,7,9,2,4,6,8,10};左边文件我们声明一个普通指针 将二维数组的内容填充进来我们来看看运行的结果结论我就不总结了 和大家的想法一样右边文件我们声明一个指针数组来存放我们再看看右边文件的运行结果...
linux下学习C语言:神器 vim + 指针相关客串

linux下学习C语言:神器 vim + 指针相关客串

linux下学习C语言:神器 vim + 指针相关客串2015-02-23前篇回顾上篇介绍了linux下C编程基本环境配置以及相关工具使用选择。不过10个大牛9个用vim,那么咱们就来玩vim。linux下玩c就别依靠图形界面。好吧告别Ide,命令行才是c的王道。本篇文章感谢名为孙鹤同学的技术支持 感谢有爱的c大牛们本文中多处使用vim插件(孙鹤提供),这些插件大多是在http://www.vim.org/处下载。指针客串因为毕业后就没玩过c了,都说指针是...
KEIL的ARM编译器对RW和ZI段的一个处理

KEIL的ARM编译器对RW和ZI段的一个处理

KEIL的ARM编译器对RW和ZI段的一个处理2015-02-23按照C编译器编译的结果,一般会产生RO段,RW段,ZI段。RO是程序中的指令和常量,RW是程序中的已初始化全局变量,ZI是程序中的未初始化或初始化为零的全局变量。那么如下的代码int aaa;int bbb;int main(){aaa = 7;bbb = 8;return 0;}应该产生的是八个字节的ZI段,但很奇怪,--bss_threshold=0Program Size: Code=...
C程序中唯一序列号的生成

C程序中唯一序列号的生成

C程序中唯一序列号的生成2015-02-23在实际的软件开发项目中,经常会涉及唯一序列号的生成。本文以一个实际的程序为例,介绍了唯一序列号的生成过程。本文生成的序列号的样式为:MMDDHHMINSS_XXXXXX。程序如下:* 修改记录1:// 修改历史记录, 包括修改日期、版本号、修改人及修改内容* 修改日期: 20140603* 版 本 号: V1.0* 修 改 人: Zhou Zhaoxiong* 修改内容: 创建******************...
<< 61 62 63 64 65 >>