C语言
niepangu
这个作者很懒,什么都没留下…
展开
-
对于结构体变量赋值的误区
以前在使用结构体时没有在结构体变量之间直接赋值,今天同事在查看别人的代码时,发现有两个结构体变量直接赋值的语句当时感觉这个语句不对,认为在一个结构体里边,既有一般的无符号整形与数组,因为数组的赋值是不能直接赋值,要内存拷贝,从这里推理所以认为这个语句不对。于是问了一下,我当时以为是结构体指针变量的赋值,认为没有问题。还和同事争论了一番,当他让我看源代码时,发现是变量间的直接赋值,下意识中的判断是不转载 2014-06-06 13:31:54 · 2180 阅读 · 0 评论 -
问题:const和volatile是否可以同时修饰一个变量?有什么含义?
问题:const和volatile是否可以同时修饰一个变量?有什么含义?答案:如果一个变量不会被本程序改变,通常可能给它加上const,但如果该变量可能被其他程序改变而本程序又在检测这个变量的值,就需要给它加上volatile,于是变量就同时有volatile和const了,这个时候i具有const和volatile的双重属性。i变量不可以在编译过程中被程序代码修改,同时编译器不得对i进行转载 2015-09-20 23:06:24 · 906 阅读 · 0 评论 -
const的常见用法
const用法主要是防止定义的对象再次被修改,定义对象变量时要初始化变量 下面我就介绍一下几种常见的用法1.用于定义常量变量,这样这个变量在后面就不可以再被修改 const int Val = 10; //Val = 20; //错误,不可被修改 2. 保护传参时参数不被修改,如果使用引用传递参数或按地址传递参数给一个函数,在这个函数里这转载 2015-03-27 08:06:11 · 507 阅读 · 0 评论 -
变量一般不要定义在.h文件中
文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的: #ifndef #转载 2015-07-22 23:17:49 · 1262 阅读 · 0 评论 -
c语言printf()输出格式大全(转载)
1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E-)记数法] %g(%G转载 2016-10-10 22:36:04 · 1474 阅读 · 0 评论 -
c语言printf()输出格式 用法联系
一下只是不常见的一种用法,例如 printf("%*d,%*d\n",c,d,e,f);http://www.cnblogs.com/tureno/articles/3630689.html#includeint main(void){ int c = 3,d = 18, e =5,f=12; printf("%d,%d\n",d,e); pr原创 2016-10-10 22:38:15 · 468 阅读 · 0 评论 -
C语言宏中"#"和"##"的用法
C语言宏中"#"和"##"的用法 在查看linux内核源码的过程中,遇到了许多宏,这里面有许多都涉及到"#"和"##",因此,在网上搜索了一些资料,整理如下:一、一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #include #include using namespace std; #define STR转载 2016-09-29 22:24:26 · 289 阅读 · 0 评论 -
C语言#define STR3 STR STR1 STR2的理解
首先写代码测试:#include#define STR "this is"#define STR1 "a test"#define STR2 "example"#define STR3 STR STR1 STR2 int main(void){ printf(STR3); return 0;}输出结果:this isa testexampl原创 2016-09-29 22:24:59 · 801 阅读 · 0 评论 -
fflush()函数
在printf()后使用fflush(stdout)的作用是立刻将要输出的内容输出。 当使用printf()函数后,系统将内容存入输出缓冲区,等到时间片轮转到系统的输出程序时(如果此时进程休眠,将无法看到输出),将其输出。 使用fflush(out)后,立刻清空输出缓冲区,并把缓冲区内容输出。 例如: for (ctr = 1; ctr { printf("."); /*转载 2016-11-20 00:20:22 · 1387 阅读 · 0 评论 -
fscanf函数的用法
以前解析有规律的文件的时候要么用正则表达式,要么就是傻傻的自己写程序来解析有规律的文件。今天突然发现c的库函数中有一个现成的可以解析有规律的文件的函数,就是fscanf()函数。哎 以前自己做了这么多无用功,在这里详细解析一下fscanf函数:fscanf()函数(有点像正则表达式):功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。转载 2016-12-22 20:33:27 · 11486 阅读 · 1 评论 -
使用 getopt() 、getopt_long()、getopt_long_only()进行命令行处理
简介: 所有 UNIX® 程序甚至那些具有图形用户界面(graphical user interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与其他程序或用户进行交互的主要手段。具有可靠的复杂命令行参数处理机制,会使得您的应用程序更好、更有用。不过很多开发人员都将其宝贵的时间花在了编写自己的命令行解析器,却不使用 getopt(),而后者是一个专门设计来减轻命令行处理负担的转载 2016-12-22 20:37:07 · 298 阅读 · 0 评论 -
百度面试题:宏的概念,与函数的区别,优缺点的比较
宏宏概念:C++ 宏定义将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替。宏书写形式:#define () 宏与函数的区别:时间上考虑:1:宏只占编译时间,函数调用则占用运行时间(分配单元,保存现场,值传递,返回),每次执行都要载入,所以执行相对宏会较慢。2:使用宏次数多时,宏展开后源程序转载 2016-04-07 18:51:14 · 849 阅读 · 0 评论 -
解析一个有关sizeof用法的题目--sizeof(i++)
代码如下: #include int main() { int i; i = 10; printf("%d\n", i); printf("%d\n", sizeof(i++)); printf("%d\n", i); return 0; }这三行输出应该是什么?答案是:10410第三个为什么不是转载 2016-04-07 20:05:15 · 715 阅读 · 0 评论 -
C语言/C++怎样产生随机数:
C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数。需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib.h;而使用time()函数需要引入ctime头文件。使用rand()函数获取一个随机数如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值,转载 2014-12-06 19:23:38 · 600 阅读 · 0 评论 -
C语言产生随机数,个人理解
关于C语言产生随机数的文章网上很多其实只需要下边三个函数即可srand();time( ); rand();需要添加头文件#include#include但是我自己尝试了一下,每次产生的数都一样我的做法如下#include #include #include //使用当前时钟做种子unsi原创 2015-01-16 14:27:04 · 847 阅读 · 0 评论 -
typedef struct CMCI_t *CMCI;的理解
typedef struct CMCI_t *CMCI;CMCI oMCIList经过上边两步骤的转换 定义的oMCIList其实就是结构体struct CMCI_t 的指针原创 2015-03-17 14:05:34 · 1519 阅读 · 0 评论 -
#ifdef 和 #if defined 的区别
#ifdef 和 #if defined 的区别在于,后者可以组成复杂的预编译条件,比如#if defined (AAA) && defined (BBB)xxxxxxxxx#endif#if defined (AAA) || VERSION > 12xxxxxxxxx#endif而#ifdef 就不能用上面的用法,也就是说,当你要判断单个宏是否定义时#ifdef 和 #if转载 2015-03-17 13:23:32 · 577 阅读 · 0 评论 -
C99标准的新特性
先简单介绍下C语言的标准.C语言的发展历史大致上分为三个阶段:Old Style C、C89和C99.Ken Thompson和Dennis Ritchie发明C语言时有很多语法和现在并不一样,但为了向后兼容性(Backward Compatibility), 这些语法仍然在C89和C99中保留下来了.C89是最早的C语言规范,于1989年提出,1990年先由ANSI(美国国家标准委员会,Am转载 2015-04-22 17:41:19 · 780 阅读 · 0 评论 -
我学习CRC32、CRC16、CRC原理和算法的总结(与WINRAR结果一致)
原文地址:http://wenku.baidu.com/view/fb791c0203d8ce2f006623f5.html我学习CRC32、CRC16、CRC原理和算法的总结(与WINRAR结果一致) wxleasyland(wxlwww@gmail.com) 2010年9月2日 比较愚钝,学了CRC校验好几天,很痛苦的过程,现终于有眉目了,总结转载 2015-05-05 10:35:00 · 2920 阅读 · 0 评论 -
状态机思路在程序设计中的应用
状态机思路在单片机程序设计中的应用状态机的概念状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,必然有状态机的身影浮现。比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。这就是最简单的按键状态机例子。实际的按键解析程序会比这更复杂些转载 2015-05-14 17:04:23 · 570 阅读 · 0 评论 -
STM32 中的 assert_param 函数
我们在学STM32的时候函数assert_param出现的几率非常大,上网搜索一下,网上一般解释断言机制,做为程序开发调试阶段时使用。下面我就谈一下我对这些应用的看法,学习东西抱着知其然也要知其所以然。4 断言机制函数assert_param我们在分析库函数的时候,几乎每一个函数的原型有这个函数assert_param();下面以assert_param(IS_GPIO_ALL_PERIP转载 2015-10-10 21:51:17 · 563 阅读 · 0 评论 -
函数getopt(),及其参数optind
getopt被用来解析命令行选项参数。#include extern char *optarg; //选项的参数指针 extern int optind, //下一次调用getopt的时,从optind存储的位置处重新开始检查选项。 extern int opterr, //当opterr=0时,getopt不向stderr输出错误信转载 2016-03-04 21:21:00 · 835 阅读 · 1 评论 -
栈溢出的原因
我们经常把堆栈放在一起说,但是 堆和栈其实是不同的。二者的不同之处百度上很多,也可以查看我转载的文章栈,堆,全局,文字常量,代码区总结堆和栈都有各自的大小,栈溢出指的是栈的使用超出了栈的大小,一个原因有两个:1、 局部数组变量空间太大 局部变量是存储在栈中的,因此这个很好理解 解决这类问题的办法有两个, 一是增大栈空间,二是改用动原创 2016-04-07 12:15:31 · 9882 阅读 · 0 评论 -
C语言输出结构体变量任意地址的数据
今天遇到一个问题,一个很大的结构体需要分两次使用串口将结构体数据发送出去,第一次发送很简单,第二次的起始地址需要跳转到结构体的中间,方法很多,比如第二次从结构体的某个元素开始,name可以取该元素的地址,或者将结构体内容拷贝到一个char数组内,然后使用数组索引定位第二次发送的起始地址,但这两种方法我都不满意,网上查找了一下可以使用指针加强制转换,:#include<stdio.h&g...原创 2018-11-29 20:21:35 · 5176 阅读 · 1 评论