
C/C++
tianmo2010
这个作者很懒,什么都没留下…
展开
-
有关指针与基础知识小结
有关指针的数据类型的小结定义含义int i ;定义整型变量iint *p ;P为指向整型数据的指针变量int a[n] ;定义整型数组a,它有n原创 2011-03-21 22:52:00 · 920 阅读 · 0 评论 -
在C平台下每隔一定时间自动弹出web页面
今天编了一个每隔10分钟就弹出一个网页的程序,为的是用来投票,算是个半自动的投票机吧。#include int main(int argc, char * argv[]){ while(1) { ShellExecute(NULL, "open", "explorer.exe", "http://www.hao123.com", NULL, SW_SHOWNORMAL); //打原创 2011-11-10 18:21:13 · 993 阅读 · 0 评论 -
结构体中四字节对齐的详解
一 四字节对齐的规则C++中结构体变量的存储为什么有个4字节对齐的规则,这里是假设32位机器上,CPU在读取内存数据的时候4字节对齐会取得更快的速度;这是因为:1字节8位,4字节正好32位,而32位机器的寄存器,地址什么的都是32位的,正好一次处理就完成。二 相关内容解释例如,下面的结构各成员空间分配情况:struct test{ char x1;原创 2012-04-10 13:39:20 · 5893 阅读 · 0 评论 -
在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
函数经过编译系统的翻译成汇编,函数名对应着汇编标号。因为C编译函数名与得到的汇编代号基本一样,如:fun()=>_fun, main=>_main但是C++中函数名与得到的汇编代号有比较大的差别。如:由于函数重载,函数名一样,但汇编代号绝对不能一样。为了区分,编译器会把函数名和参数类型合在一起作为汇编代号,这样就解决了重载问题。具体如何把函数名和参数类型合在一起,要看编译器的帮助说明了原创 2011-09-25 18:58:06 · 2220 阅读 · 0 评论 -
常见字符串处理函数返回值的总结
1 int getchar(void);getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显原创 2011-09-27 10:12:09 · 2178 阅读 · 0 评论 -
寻找素数
素数在我们实际编程中时常遇到,现有几个寻找素数的方法。方法一)// 构造素数序列primes[]void makePrimes(int primes[], const unsigned int num){ int i, j, nCount; primes[0] = 2; primes[1] = 3; nCount = 2;//alrea原创 2011-06-01 14:32:00 · 1175 阅读 · 0 评论 -
指针地址,内存的详细讲解
//the Jobs of AliCloud#include void swap(int &a,int &b){ int tmp; tmp = a; a = b; b = tmp;}void main(){ printf("lengthOfShort = %d\n",sizeof(short)); printf("lengthOfInt = %d\n",sizeof(i原创 2011-07-05 19:37:56 · 923 阅读 · 0 评论 -
static关键字的详解
一 面向过程程序设计1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1 #include void fn(); static int n; //定义静态全局变量 void main() { n=20; cout<<n<<endl; fn(); }原创 2012-04-10 14:54:55 · 1235 阅读 · 0 评论 -
用C实现简单的万年日历
已知: 2010年1月1日是星期五,为了简便,我们假设每一年都为365天,请编程实现,任意输入某年某月,打印出该月的第三个星期五是多少号? 分析:首先,我们要编码实现,每一年的第一天是星期几;再编码实现,每一年的每一个月是星期几;最后,只需调用函数便能解决问题。 #include int getEveryStartDay(int year)//获取每一年的第一天星期几{原创 2011-10-12 19:13:03 · 1446 阅读 · 0 评论 -
C++内存管理
[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支转载 2011-09-01 10:39:03 · 831 阅读 · 0 评论 -
静态,动态链接库的生成与应用
一 静态链接库的生成与应用在VC++6.0中new一个名称为libTest的staticlibrary工程,并新建lib.h和lib.cpp两个文件,lib.h和lib.cpp的源代码如下://文件:lib.h#ifndef LIB_H#define LIB_Hextern "C" int add(int x,int y); //声明为C编译、连接方式的外部函数#e原创 2012-01-04 21:48:21 · 1200 阅读 · 0 评论 -
2009年校程序设计大赛五个题目
// Test_TianMo.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "stdio.h"#include "math原创 2011-03-22 13:38:00 · 846 阅读 · 0 评论 -
小端机器数据在内存中的存储
#include #include union Num{ char a[4]; int b; };void main() { Num x; x.a[0]=‘A’; x.a[1]=‘B’; x.a[2]=‘C’;x.a[3]=‘D’;cout<<x.a<<endl; cout<<x.b<<endl;cout<<hex<<x.b<<原创 2011-11-27 19:25:58 · 1140 阅读 · 0 评论 -
浅谈C/C++中的指针和数组
指针是C/C++的精华,而指针和数组又是一对欢喜冤家,很多时候我们并不能很好的区分指针和数组,对于刚毕业的计算机系的本科生很少有人能够熟练掌握指针以及数组的用法和区别。造成这种原因可能跟现在大学教学以及现在市面上流行的很多C或者C++教程有关,这些教程虽然通俗易懂,但是在很多关键性的地方却避而不谈或者根本阐述不清楚,甚至很多时候阐述的是错误的观点。一般最初学习C/C++的时候接触到的都是这类教程,转载 2011-11-10 18:31:10 · 707 阅读 · 0 评论 -
字符编码:ASCII,Unicode,UTF-8,GB2312
从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为: ASC码: 00110101 00110110 00110111 00111000 ↓ ↓ ↓ ↓转载 2011-11-10 19:41:24 · 3188 阅读 · 0 评论 -
字符类型及其数组常使用的说明
一 关于数组使用以及其是否初始所表示的意思:1,C语言有的数据类型都可以作为数组的类型,不光是int,char, float, double, long 指针 结构等等都可以是数组的类型。2,那么char型变量和数组用什么值给其初始化比较安全?这种提问没有见过,只能说不初始化会使数组指向其他内存单元,导致不确定的值。最好是在数组初始化的时候赋给你需要用的值。通常我们一般是赋值为0;原创 2012-01-08 13:44:14 · 810 阅读 · 0 评论 -
C语言详解 - 枚举类型
注:以下全部代码的执行环境为VC++ 6.0 在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是: #define MON 1#define TUE 2#define WED 3#define THU 4#define FRI 5#define SAT 6#define SUN原创 2011-07-04 10:39:50 · 4316 阅读 · 1 评论 -
填充代码,显示hello world !
一道笔试题如下,在print()函数中填充代码,使之显示hello,worldmain()不做改动#include "stdio.h"void print(){ }void main(){}方法一:#include "stdio.h"void print(){}int temp = printf("hello world!\n");原创 2011-09-01 10:24:40 · 1490 阅读 · 0 评论 -
零值比较(bool,int,float,指针变量与零值比较的if语句)
这是程序员面试的一道常见题,也是个C++基础问题。若只在大学里看过几本基础的编程入门书,看见这道题可能会觉得奇怪,不就是和0比较吗,直接拿出来比就是了,其实非也。下文引自google搜索结果,出处不详,高手可以无视,菜菜留下,记得做好笔记。首先给个提示:题目中要求的是零值比较,而非与0进行比较,在C++里“零值”的范围可就大了,可以是0, 0.0 ,FALSE或者“空指针”。①int型原创 2011-08-14 16:12:27 · 5418 阅读 · 0 评论 -
typedef和define的详解
#define struct s * tPS 和 typedef struct s * tPS 哪个好,为什么?1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不管含义是否正确,照样带入,只有在编译已被展开的源程序时,才会发现可能的错误并报错。例如:#define PI 3.1415926程序中的:area=PI*r*r 会替换为3.141592原创 2011-09-25 17:59:43 · 996 阅读 · 0 评论 -
命名空间的使用与详解
关于命名空间的使用与详解昨天晚上一同学给我讲了下命名空间namespace,讲完后,恩,我以为自己懂了。 今天借着在用heritrix在seekda.com上爬网站的时间,我想着自己老是说要用用C++的模板(template)来试着写东西的,但一直没搞。现在正好有时间可以来试验一下的,于是就试着写了两个实质一样的小程序。就是通过这两个小程序,引发了后面一系列的问题,同时也暴露出了我的不足。原创 2011-10-02 15:28:23 · 1140 阅读 · 0 评论 -
【Boost】Boost总结汇总
boost::noncopyable比较简单, 主要用于单例的情况.通常情况下, 要写一个单例类就要在类的声明把它们的构造函数, 赋值函数, 析构函数, 复制构造函数隐藏到private或者protected之中, 每个类都这么做麻烦.有noncopyable类, 只要让单例类直接继承noncopyable. class noncopyable的基本思想是把构造函数和析构函数设置p转载 2015-01-28 14:55:27 · 1577 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.youkuaiyun.com/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2013-01-12 23:35:41 · 1352 阅读 · 0 评论 -
C++中的string的replace用法
_size ( ); // max=4294967294.basic_string::rfind寻找给定的string。返回找到的第一个string 下标值;如果没找到则返回npos。与find 不同的是:rfind 默认从npos 开始找。其他相同。basic_string::replace将原string 中的元素或子串替换。返回替换后的string转载 2012-08-20 14:52:25 · 2051 阅读 · 0 评论 -
Valgrind简单用法
Valgrind的主要作者Julian Seward刚获得了今年的Google-O'Reilly开源大奖之一──Best Tool Maker。让我们一起来看一下他的作品。Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包含一个内核──一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等。Valgrind可以检测内存泄漏和内存违例,转载 2011-04-14 13:08:00 · 1199 阅读 · 0 评论 -
C++基础之boost库的智能指针
【Boost介绍】Boost是个组织(http://www.boost.org/),提供可移植的,源码开放的C++程序库。部分Boost库已经被包含到了C++标准化委员会的TR1中。目前可以下载到到最新boost库是1.47.0。解压后的目录结构:使用大多数boost库不需要build,包含头文件就可以了。project 右键Properties -> C/C++ ->Genera转载 2012-08-20 11:54:33 · 1561 阅读 · 0 评论 -
c++实现反射类
在很多程序设计中,经常会遇到这样的需求,即可以通过类的名字得到对应类型的对象,尤其是一种数据需要很多策略处理的时候。比如对于网页类型的识别,一篇网页可能是视频类型、新闻类型、图片类型、网站首页、百科等很多类型中的一种,网页类型对于搜索引擎来说是非常重要的,计算rank的时候网页类型往往是一个非常重要的因子。具体实现的时候,网页类型识别的策略可以封装在类中,这样一个策略就可以设计成一个类。但是后期随原创 2017-02-09 10:49:20 · 1173 阅读 · 0 评论 -
boost asio详解
Boost.Asio入门首先,让我们先来了解一下什么是Boost.Asio?怎么编译它?了解的过程中我们会给出一些例子。然后在发现Boost.Asio不仅仅是一个网络库的同时你也会接触到Boost.Asio中最核心的类——io_service。什么是Boost.Asio简单来说,Boost.Asio是一个跨平台的、主要用于网络和其他一些底层输入/输出编程的C++库。计算机网络的原创 2011-09-03 13:36:08 · 4778 阅读 · 1 评论 -
C、C++数据类型所占字节数
C标准中并没有具体给出规定那个基本类型应该是多少字节数,具体与机器、OS、编译器有关,比如同样是在32bits的操作系统系,VC++的编译器下int类型为占4个字节;而tuborC下则是2个字节。所以int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的):sizeof(short int)sizeof(转载 2012-02-17 16:44:11 · 3962 阅读 · 0 评论 -
抽奖程序
一、int rand()可以生成从[0, 65536)之间均匀分布的随机数。现要求实现:有30万员工,使用rand()写一个抽奖程序,抽出人100获奖。#include #include using namespace std;typedef set ISET;ISET GetPridePersonId(const int num, const int pride_num)原创 2013-08-19 15:37:44 · 1893 阅读 · 1 评论 -
深入浅出C/C++中的正则表达式库
一、深入浅出C/C++中的正则表达式库(一)——GNU Regex Library写在前面: 本文是面向有正则表达式基础的读者朋友的,如果你还不知道正则表达式是什么,请先到这里学习一下 :http://en.wikipedia.org/wiki/Regular_expression。正则表达式(Regular Expressions),又被称为regex或regexp,是一种十原创 2013-07-17 10:12:59 · 7944 阅读 · 0 评论 -
枚举类型在组合数据的使用
先看一段代码:#include "stdio.h"int main(){ enum color{red,yellow,blue,white,black}; int i,j,k,n = 0,nChoice,loop; //printf("red = %d,black = %d\n",red,black); for(i = red; i <= black;i ++) { for原创 2011-09-16 13:40:28 · 956 阅读 · 0 评论 -
printf()函数的返回值以及多态实现
函数返回值:printf函数的一般形式为: int printf(const char *format,[argument]); 以上形式,我们在Visual C++里输入“printf(”将会看到。 说明printf函数类型为整型,其返回值是整型值。 其值实际为printf控制输出的字符数。 printf()函数实际上是将原创 2011-09-01 18:01:45 · 1475 阅读 · 0 评论 -
MFC下DLL/lib的调用
1、简介:dll和.lib都是程序集合,便于代码重用。都是二进制的文件。.dll也叫动态链接库,与程序链接的方式为运行时链接(run-time linked),为PE(portable executable)格式,也就是程完整的程序。.exe、.dll、.fon、.mod、.drv、.ocx等等都是动态链接库。如.exe为系统调用的函数集合。.dll不存在同名引用,且有导出表,与导入表原创 2011-11-11 19:08:30 · 9249 阅读 · 1 评论 -
深入理解C++的new()
new和delete运算符用于动态分配和撤销内存的运算符new用法: 1. 开辟单变量地址空间 1)new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a.原创 2011-11-18 20:55:11 · 1220 阅读 · 0 评论 -
C++异常处理
异常:程序执行期间,可检测到的不正常情况。例如:0作除数;数组下标越界;打开不存在的文件;远程机器连接超时;malloc失败等等。程序的两种状态:正常状态和异常状态,发生不正常情况后,进入异常状态,从当前函数开始,按调用链的相反次序,查找处理该异常的程序片断。1.throw 表达式语义:用表达式的值生成一个对象(异常对象),程序进入异常状态。原创 2012-09-03 17:41:09 · 1458 阅读 · 0 评论 -
从配置文件中获取IP,并分段显示
#include "stdio.h"#include "stdlib.h"#include "string.h"#include "malloc.h"#define N 20#define M 256typedef struct node{ char name[N]; char value[N]; struct node *next;}node;void print(n原创 2011-03-21 23:04:00 · 1091 阅读 · 0 评论 -
C++ 对象的内存布局
前言 07年12月,我写了一篇《C++虚函数表解析》的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我在这里一并对大家的留言表示感谢。这也是我为什么再写一篇续言的原因。因为,在上一篇文章中,我用了的示例都是非常简单的,主要是为了说明一些机理上的问题,也是为了图一些表达上方便和简单。不想,这篇文章成为了打开C++对象模型内存布局的一个引子,引发转载 2013-01-12 23:44:33 · 848 阅读 · 0 评论 -
可伸缩多线程任务队列
在我们的工作中,我们经常需要异步执行一些任务,下面介绍的这个可伸缩多线程队列,可满足我们的需求。 出自:http://www.codeproject.com/Articles/4148/Multithreaded-Job-Queue,主要有以下几个功能: 1、任务队列是多线程,许多任务可以异步进行,任务队列使用线程池来执行任务。 2、任务队列支持优先级,优先级转载 2013-07-15 18:39:29 · 1856 阅读 · 0 评论 -
GCC 提供的原子操作
GCC 提供的原子操作gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作。其声明如下:type __sync_fetch_and_add (type *ptr, type value, ...)type __sync_fetch_and_sub (type *ptr, type value, ...)type __sync_fetch_and_...转载 2018-05-16 21:24:36 · 965 阅读 · 0 评论