![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 81
开心an
这个作者很懒,什么都没留下…
展开
-
随机函数学习笔记
在C语言中:(来自http://hi.baidu.com/xiaosi2468/blog/item/a5f3bbcc40010637b600c899.html)rand 函数产生一个随机数(0到 0x7fff 之间)原型为int rand(void)srand 函数和原创 2011-08-26 16:21:27 · 661 阅读 · 0 评论 -
解析C语言结构体对齐(内存对齐问题)
C语言结构体对齐也是老生常谈的话题了。基本上是面试题的必考题。内容虽然很基础,但一不小心就会弄错。写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢? 开始学的时候,也被此类问题困扰很久。其实相关的文章很多,感觉说清楚的不多。结构体到底怎样对齐? 有人给对齐原则做过总结,具体在哪里看到现在转载 2014-05-20 11:41:06 · 546 阅读 · 0 评论 -
各种排序算法的复杂度
排序法平均时间最差情形稳定度额外空间备注冒泡O(n2)O(n2)稳定O(1)n小时较好交换O(n2)O(n2)不稳定O(1)n小时较好选择O(n2)O(n2)不稳定O(1)n小时较好转载 2015-01-27 10:50:26 · 554 阅读 · 0 评论 -
二维指针与函数
直接上例程:原创 2014-05-20 18:29:08 · 683 阅读 · 0 评论 -
原子(atom)数据结构接口与实现
本文差不多照搬《C语言接口与实现》的第三章,原子。书上介绍:原子是一个指针,指向唯一不可变的序列,序列中包含零个或多个字节。好像很难理解的样子。。。还是先看一下接口:int Atom_length(const char *str);const char *Atom_new(const char *str, int len);const char *Atom_string(c转载 2015-01-16 10:20:51 · 2869 阅读 · 0 评论 -
C++四种强制转换
C++的四种强制类型转换,所以C++不是类型安全的。分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的C++类型的强制转换呢?新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。C++中风格是转载 2015-07-16 09:40:10 · 544 阅读 · 0 评论 -
ScrollWindow()函数
在学习windows编程第五版时,介绍scrollbar时,改进的程序用到了ScrollWindow()函数。按照我的理解,如果使用了UpdateWindow()函数可以不使用ScrollWindow()函数。因为UpdateWindow()函数会产生一个WM_PAINT消息。为了搞清楚ScrollWindow()函数的作用,我将代码加了些调试代码/*-------------------原创 2015-07-22 10:29:23 · 5644 阅读 · 2 评论 -
VC6 go to definition不好用解决方法
你如果是控制台程序的话,这样试试:project->settings->C/C++属性页,选上Generate browse info复选框。再打开browse info属性页,选上build browse info into file,然后OK。再build->rebuild all;然后再试一下go to definition ofXXX ,看看行不行。来自:http://blog.转载 2015-08-31 15:32:08 · 1999 阅读 · 0 评论 -
VC6.0 C++编程错误error LNK2001
解决外部符号错误:_main,_WinMain@16,__beginthreadex在创建MFC项目时, 不使用MFC AppWizard向导, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainLIBCD.lib(转载 2015-08-21 13:42:55 · 8024 阅读 · 2 评论 -
[C/C++]函数如何返回struct或class对象
本文写于我对C++尚不是很了解的时期,所以文中存在很多漏洞。为了避免浪费你的时间,请绕道! 所有的C、C++教科书都警告我们:不要通过函数来返回struct或 class对象,否则会造成内存复制以及复制构造函数的调用,降低性能。相信这句话已经成为了一个常识,大家都能牢记于心。然而,有时候我们不得不违反这个警告,例如,通过函数获取一个std::string对象(以个人的经验而言,这种转载 2016-01-07 17:12:30 · 4570 阅读 · 0 评论 -
C语言面试题
1.char * const p;//常量指针,p的值不可以修改char const *p;//指向常量的指针,指向的常量值不可以改const char *p;//和char const *p2.char (*str)[20];//str是一个数组指针,即指向数组的指针char *str[20];//str是一个指针数组,其元素为指针型数据3.用变量a给出下转载 2014-05-20 16:40:44 · 595 阅读 · 0 评论 -
c语言宏定义,可变参数的使用
...在C宏中称为Variadic Macro,也就是变参宏。比如:#define myprintf(templt,...) fprintf(stderr,templt,__VA_ARGS__) // 或者#define myprintf(templt,args...) fprintf(stderr,templt,args)第一个宏中由于没有对变参起名,我们用默认的宏__VA_A转载 2014-01-07 08:48:10 · 1474 阅读 · 0 评论 -
C语言中结构体的初始化
《代码大全》建议在变量定义的时候进行初始化,但是很多人,特别是新人对结构体或者结构体数组定义是一般不会初始化,或者不知道怎么初始化。1、初始化typedef struct _TEST_T { int i; char c[10];}TEST_T;TEST_T gst = {1, “12345”};//可以初始化,设置i为1,s为一个字转载 2014-01-07 09:47:35 · 717 阅读 · 0 评论 -
c有关函数指针数组
1.函数的指针可以作为函数的参数传递例如:void Drv_TMR_Init(TSB_TB_TypeDef* pt_tb_type, DWORD dw_tmr_period, void (*Int_Irq)( )){ TMRB_InitTypeDef myTMRB;原创 2012-07-05 11:23:22 · 739 阅读 · 0 评论 -
C项目经验总结
毕了业,搞起了嵌入式软件。一切都从头来。下面是我的一些项目经验1.软件要分层 C语言虽是面向过程的语言,但是并不意味着,设计程序的时候要把一个分任务从头写到尾。要学会 任务分隔。我的做法是这样的,先把程序从功能或硬件上,分成几个模块。每个模块完成自己的事情, 一般是设置相应的标志位,并不做实际的工作。如果标志位过多,就充分利用结构体的优势。 上下关系的模块:下原创 2012-08-13 11:47:37 · 1791 阅读 · 0 评论 -
新型的按键扫描程序,仅三行程序
新型的按键扫描程序不过我在网上游逛了很久,也看过不少源程序了,没有发现这种按键处理办法的踪迹,所以,我将他共享出来,和广大同僚们共勉。我非常坚信这种按键处理办法的便捷和高效,你可以移植到任何一种嵌入式处理器上面,因为C语言强大的可移植性。同时,这里面用到了一些分层的思想,在单片机当中也是相当有用的,也是本文的另外一个重点。对于老鸟,我建议直接看那两个表达式,然后自己想想就会懂的了,也不转载 2012-10-05 10:00:07 · 742 阅读 · 0 评论 -
C语言中的typeof关键字
typeof关键字是C语言中的一个新扩展。typeof的参数可以是两种形式:表达式或类型。下面是使用表达式的的例子: typeof(x[0](1)这里假设x是一个函数指针数组,这样就可以得到这个函数返回值的类型了。如果将typeof用于表达式,则该表达式不会执行。只会得到该表达式的类型。以下示例声明了int类型的var变量,因为表达式foo()是int类型的。由于表达转载 2013-01-10 16:33:18 · 4380 阅读 · 1 评论 -
GNU的ar、ranlib和nm区别(转)
RANLIB 的作用:CC = CC=/usr/local/ndk/toolchain/arm-eabi/bin/arm-eabi-gccLD = LD=/usr/local/ndk/toolchain/arm-eabi/bin/arm-eabi-gccAR = AR=/usr/local/ndk/toolchain/arm-eabi/b转载 2013-01-11 11:29:56 · 948 阅读 · 0 评论 -
堆栈
几个问题:1、编译器、连接器把堆栈段定位在IDATA内所有段的最后面,也即内存IDATA高端;2、中断堆栈被定位在堆栈段内的最后面,即IDATA最顶端;所以堆栈段的安全余量设置,实际上是中断堆栈深度的配置。3、如果不考虑系统堆栈的安全余量设置,一个没有二级中断嵌套的一级中断堆栈深度应该是13字节。——为什么?4、系统中断的安全余量配置应该是……字节。——为什么?下面详细说明转载 2013-01-14 16:29:10 · 747 阅读 · 0 评论 -
堆栈2
今天在搞arm汇编,终于明白它的堆栈到底是个怎么回事先贴上代码:USR_STACK_LENGTH EQU 64SVC_STACK_LENGTH EQU 0FIQ_STACK_LENGTH EQU 16IRQ_STACK_LENGTH EQU 64ABT_STACK_LENGTH EQU 0UND_STACK_LENGTH EQU 0 AREA Example5,C原创 2013-01-18 18:03:09 · 1229 阅读 · 0 评论 -
static的作用(经典)
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'; // global variable转载 2013-04-23 08:06:12 · 645 阅读 · 0 评论 -
字符串数组
1. char *str[] = {"a", "bbbb"} 比char str[][5] = {"a", "bbbb"} 更省内存2. int main(int argc, char *argv[])命令行参数的使用===============================================================================13.7 字转载 2013-07-17 09:39:56 · 1308 阅读 · 0 评论 -
指针函数与函数指针的区别
一、在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变转载 2016-10-12 14:27:17 · 212 阅读 · 0 评论