随笔分类 -  基本功

摘要:首先,我们要知道,0长度的数组在ISO C和C++的规格说明书中是不允许的。这也就是为什么在VC++2012下编译你会得到一个警告:“warning C4200: 使用了非标准扩展 : 结构/联合中的零大小数组”。那么为什么gcc可以通过而连一个警告都没有?那是因为gcc 为了预先支持C99的这种玩法,所以,让“零长度数组”这种玩法合法了。关于GCC对于这个事的文档在这里:“Arrays of Length Zero”,文档中给了一个例子(我改了一下,改成可以运行的了):#include #include struct line {int length;char contents[0]; // 阅读全文
posted @ 2014-04-04 23:21 KingsLanding 阅读(2307) 评论(0) 推荐(2) 编辑
摘要:#include #include void heaplify(int *arr, int len, int pos){ int left = pos * 2 + 1; int right = pos * 2 + 2; int max = 0; int temp = 0; if( left arr[pos]) { max = left; } else { max = pos; } if( right arr[max]) { max = right; } if... 阅读全文
posted @ 2014-03-29 23:39 KingsLanding 阅读(458) 评论(0) 推荐(0) 编辑
摘要:之前在看黑客与画家的时候看过,今天重温,完全不一样的感觉!原文地址:http://www.ruanyifeng.com/blog/2010/10/why_lisp_is_superior.html--------------------------------------------------------------------------------------------------------------------------作者:阮一峰日期:2010年10月14日上周,《黑客与画家》总算翻译完成,已经交给出版社了。翻译完这本书,累得像生了一场大病。把书稿交出去的时候,心里空荡荡的, 阅读全文
posted @ 2013-08-24 19:53 KingsLanding 阅读(578) 评论(0) 推荐(0) 编辑
摘要:原文地址:http://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threadsAvoiding and Identifying False Sharing Among ThreadsAbstractIn symmetric multiprocessor (SMP) systems, each processor has a local cache. The memory system must guarantee cache coherence.False sharing oc 阅读全文
posted @ 2012-12-23 20:25 KingsLanding 阅读(1597) 评论(0) 推荐(1) 编辑
摘要:很多人以为“指向数组的指针”就是“指向指针的指针”,于是有人写这样的代码:int a[3][4];int **p = a;//错误 这个代码的错误之处在于a是一个数组,它的成员也是数组,所以a叫做“数组的数组”——C++中严格说来没有二维数组。那么,你要用一个指针来记录a,就要用一个能表示“数组的数组”的指针,以下代码是正确的:int (*p)[4] = a;//正确 只有这样才能保证++p使p指向a的下一对像(该对像是一个数组)。 顺便提一句:不要写成“int *p[4];”来看一下指针数组的指针怎么用,既然都是指针也应该支持动态内存分配,下面的例子展示了如何对数组的指针动态分配内存:... 阅读全文
posted @ 2012-07-30 22:25 KingsLanding 阅读(423) 评论(0) 推荐(1) 编辑
摘要:C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不上在嵌入式系统上。如果上述任何问题的答案是“是”的话,那么我知道我得认真考虑我是否应该去做这份工作。从面试.. 阅读全文
posted @ 2012-07-30 21:47 KingsLanding 阅读(586) 评论(0) 推荐(0) 编辑
摘要:这里介绍的马尔科夫链算法实现的功能是:读入一段英文文本,构造出由这个文本中语言使用情况而形成的统计模型,然后根据统计模型随机输出另一段文本。 马尔科夫链算法的基本思想是:将输入想象成一些相互重叠的短语构成的序列,把每个短语分割为两个部分:一部分是由多个词构成的前缀,另一部分是只包含一个词的后缀。马尔科夫链算法能够生成输出短语的序列,其方法是依据原文本的统计性质,随机地选择跟在前缀后面的特定后缀。采用三个词的短语就能够很好工作,这三个词中前两个词构成前缀来选择作为后缀的一个词设置:w1和w2为文本的前两个词输出w1和w2循环: 随机地选出w3,它是文本中w1w2的后缀中的一个 打印w3 把w.. 阅读全文
posted @ 2012-06-18 22:27 KingsLanding 阅读(10512) 评论(0) 推荐(1) 编辑
摘要:使用gvim在windows环境下搭建简单的IDE环境可以参见:http://my.oschina.net/u/146511/blog/50717该文章讲的很详细,而且给出了各种辅助插件的下载链接。这里主要讲如何在gvim环境下通过快捷键编译程序。如果需要编译C/C++程序,首先将微软的cl 编译器 加入到环境变量中,也就是说在cmd 模式下能够使用cl。这里就首先来讲一下如何将 cl 加入到环境变量中。如果是使用VS2010及更低版本需要这样做:我的电脑->属性->高级系统设置->环境变量新建:INCLUDE 、LIB、PATH 三个变量,填入下面的值:假设我的VS2010 阅读全文
posted @ 2012-06-16 22:56 KingsLanding 阅读(9729) 评论(0) 推荐(0) 编辑
摘要:这里主要实现两个线程间通信,当flag = 10 之后通知另外一个线程(也就是“Linux内核多线程(二)”中的程序的各种平台实现)。首先是C++ 11 的方式:#include <thread>#include <iostream>#include <mutex>#include <queue>#include <condition_variable>#include <atomic>using namespace std;const int M = 10;int main(){ mutex lockBuffer; in 阅读全文
posted @ 2012-06-14 23:05 KingsLanding 阅读(2566) 评论(0) 推荐(0) 编辑
摘要:指针的运算和普通的算术运算是不同的,支持的运算符也很少,有时候你把两个指针相减得到的结果可能会不如你所想。今天来稍微总结一下:1.指针的有限算术运算:自增(++), 自减(--), 加上一个整数(+, +=), 减去一个整数(-, -=), 以及减去另一个指针2.指针加上或减去一个整数时,并非简单地加上或减去该整数值,而是加上该整数与指针引用的对象的大小的乘积。对象的大小(字节数)取决于对象的数据类型。3.对于x=p1-p2,是把从p2到p1的数组元素的个数赋给x。因为除了数组元素外,我们不能认为两个相同类型的变量是在内存中连续存储的,所以指针算术运算除了用于数组外没有什么意义。两个指针相减的 阅读全文
posted @ 2012-06-06 23:07 KingsLanding 阅读(1185) 评论(0) 推荐(0) 编辑
摘要:下面列举了一些常见的宏写法:#include <stdio.h>#include <stdlib.h>#define byte char#define word short//得到指定地址上的一个字节或字#define MEM_B( x ) ( *( (byte *) (x) ) )#define MEM_WORD( x ) ( *( (int *) (x) ))//得到一个field在结构体(struct)中的偏移量#define FPOS(type,member) ((size_t) &((type *)0 )->member)//得到一个结构体中fi 阅读全文
posted @ 2012-06-05 22:32 KingsLanding 阅读(6779) 评论(0) 推荐(1) 编辑
摘要:我使用的是Visual Studio 11 beta,Win7系统。下面示例程序中通过使用_CrtDumpMemoryLeaks() 或 _CrtSetDbgFlag()来进行内存泄露检测。当发生内存泄露的时候在debug窗口会给出内存泄露的信息,其中_CrtDumpMemoryLeaks用来需要检测的代码的后面,_CrtSetDbgFlag() 用在程序的一开始,总的来说_CrtSetDbgFlag() 比较强大一点。在程序的开头最好加上以下宏定义:#ifdef _DEBUG#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)#endif这样在 阅读全文
posted @ 2012-05-19 12:47 KingsLanding 阅读(3032) 评论(0) 推荐(0) 编辑
摘要:链表合并先,将两个链表排序,在合并的时候引入一个内存泄露的问题,之后会继续讨论。#include <ctime>#include <cstdlib>#include <iostream>#include <cstdio>using namespace std;#define NN#define RANGE 100#define NUM 10struct node{int value;node * next;node(int v = -1, node *nxt = NULL) : value(v),next(nxt){}};node * make_ 阅读全文
posted @ 2012-05-18 22:47 KingsLanding 阅读(2997) 评论(0) 推荐(0) 编辑
摘要:就直接贴代码了:#include <iostream>#include <ctime>#include <cstdlib>using namespace std;#define NN 1struct node{int value;node * next;node(int v = -1, node *nxt = NULL) : value(v),next(nxt){}};node* reverse(node * ); //直接使用 node 代表这个结构体node * make_link();void display(node *);int main(){no 阅读全文
posted @ 2012-05-18 22:37 KingsLanding 阅读(231) 评论(0) 推荐(0) 编辑
摘要:C++用 ifstream 声明输入文件对象,用 ofstream 声明输出文件对象。getline的使用:(感觉有点像孔乙己的茴香豆的 茴 的写法了)#include<iostream>#include<fstream>#include<string>using namespace std;int main(){ ifstream infile("getline.txt",ios::in | ios::binary); char buf1_1[30]; string buf1; char buf2[30]; ///注意这里getline 阅读全文
posted @ 2012-05-18 20:14 KingsLanding 阅读(4109) 评论(0) 推荐(0) 编辑
摘要:Linux环境下:/**struct timeval { time_t tv_sec; // 秒 suseconds_t tv_usec; // 微妙 (10的负六次方)}; typedef struct timespec{time_t tv_sec;//秒long tv_nsex;//纳秒}timespec_t;**/#include <algorithm>#include <vector>#include <stdio.h>#include <stdlib.h>#include <sys/time.h>double getTime 阅读全文
posted @ 2012-05-17 23:37 KingsLanding 阅读(295) 评论(0) 推荐(0) 编辑
摘要:今天在QQ群中有人问起这两个问题,我只是在oneNote中做过笔记,也不是很熟,只不过oneNote的搜索功能太难用了。觉得这些基本功问题还是要熟悉才好。首先是格式转换,什么浮点数转换为字符串,字符串转换为浮点数,建议使用C++ 的字符处理类,stringstream,在exceptional C++中好像说过sprintf什么的不是很安全。下面来看例子:#include <sstream>#include <iostream>using namespace std;int main() stringstream ss; double a = 3.141592; dou 阅读全文
posted @ 2012-05-17 23:32 KingsLanding 阅读(261) 评论(0) 推荐(0) 编辑
摘要:原文地址:http://coolshell.cn/articles/3643.html想更深入的学习GDB调试程序可以学习陈皓老师的:用GDB调试程序七、八年前写过一篇《用GDB调试程序》,于是,从那以后,很多朋友在MSN上以及给我发邮件询问我关于GDB的问题,一直到今天,还有人在问GDB的相关问题。这么多年来,有一些问题是大家反复在问的,一方面,我觉得我以前的文章可能没有说清楚,另一方面,我觉得大家常问的问题正是最有用的,所以,在这里罗列出来。希望大家补充。一、多线程调试多线程调试可能是问得最多的。其实,重要就是下面几个命令:info thread 查看当前进程的线程。 thread < 阅读全文
posted @ 2012-05-13 22:25 KingsLanding 阅读(358) 评论(0) 推荐(0) 编辑
摘要:一:列文件清单1. List(gdb) list line1,line2二:执行程序要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。(gdb)set args –b –x(gdb) show argsbacktrace命令为堆栈提供向后跟踪功能。Backtrace 命令产生一张 阅读全文
posted @ 2012-05-13 22:17 KingsLanding 阅读(1283) 评论(0) 推荐(0) 编辑
摘要:接上一篇:使用 GNU 的 GDB调试器,内存布局和栈 —— 01原文地址:http://www.dirac.org/linux/gdb/02a-Memory_Layout_And_The_Stack.php符号表 一个符号就是一个变量或者一个函数。符号表如你所想:就是在可执行文件中的一个包含变量和函数的表。 正常情况下符号表只包含符号的地址,因为计算机不使用我们给变量或者函数起的名字。 为了让GDB对我们来说有用,有必要能够通过变量或者函数名来引用变量,而不是使用它们的地址。人类使用的是诸如“main()”或者“i”。 计算机使用如0x804b64d 或0xbffff784 之类的地址。因为 阅读全文
posted @ 2012-05-13 21:51 KingsLanding 阅读(1605) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示