随笔分类 - C/C++
编程语言和环境搭建
摘要:柔性数组是C99的扩展,简而言之就是一个在struct结构里的标识占位符(不占结构struct的空间)。声明typedef struct zero_array{ size_t len; void * array[0];}zero_array_t;大小可以用sizeof 看看其大小printf("%d\n",sizeof(zero_array_t));//Debian IA 32 下输出4可以看到其array并没有占用空间。申请空间zero_array_t *ptr = (zero_array_t *)malloc(sizeof(zero_array_t)+sizeof(vo
阅读全文
摘要:相对《简单多线程拷贝单文件示例》扩展了任务队列。主要核心在于将单个大文件分成多份(比如100),形成一个任务,并将任务用链表链接起来,形成一个队列(FIFO)或者栈(无非是顺序不同)。相对第一版来说,thread_block的定义发生了些变化,但用户接口未变。typedef struct thread_block{ int infd; ///<*文件句柄 int outfd; size_t start_position;///<*文件的写入起始位置 size_t block_size; ///<* 文件写入的终止位置[first ,last)开区间 /...
阅读全文
摘要:整理以前的代码,发现这个还有个尾巴没有做。于是花了点时间捡起来。代码如下View Code /* * ===================================================================================== * * Filename: copy.c * * Description: 多线程拷贝文件 * * Version: 1.0 * Created: 03/17/2012 04:53:09 AM * Revision: none * Compile...
阅读全文
摘要:消息队列的实现转换为经典的生产者——消费者模型。网上很多实现只能在生产者:消费 = 1:1的情况下运行。本实现参考《Unix 网络编程——卷二 进程间通信》,可以在任意配比下运行。还参考了《一种同步消息队列模型(C++)》,但由于 STL中的deque不必担心内存分配问题,所以实现只有互斥相关的操作。来看基础消息的定义,作为基类——有其它消息类型可以模拟C++中的继承机制。typedef struct ares_msg_block{ pthread_t pid; void *msg;}msg_block_t;共享内存区域,即循环消息队列的结构定义typedef s...
阅读全文
摘要:看到某个源码,有个关于struct初始化的问题不是太清楚。源码如下#define _OBJ_CONTAINER_LIST_INIT(c) \ {&(rt_object_container[c].object_list), &(rt_object_container[c].object_list)}struct rt_object_information rt_object_container[RT_Object_Class_Unknown] ={ /* initialize object container - thread */ {RT_Object_Class_T...
阅读全文
摘要:白痴一下——突然发现自己真的好白痴。以前总是以为define后面跟着数字才算define成功。#define LWIP_UDP#include <stdio.h>int main(){ #ifdef LWIP_UDP printf("define\n"); #else printf("undefine\n"); #endif return 0;}输出define再测试下#define LWIP_UDP 1#include <stdio.h>int main(){ #ifdef LWIP_UDP printf("def..
阅读全文
摘要:今天有人问到二维数组传参的事情,自己尝试着写了下。int main()//must return int{ int table[3][4]={1,2,3,4,2,3,4,5,3,4,5,6}; PrintTable((int **)table,3,4); //RowSum( table,3); RowSum2( (int **)table,3,4); PrintTable((int **)table,3,4);}函数声明为void RowSum( int array[][4], int nrow);void RowSum2(int **array,unsigned...
阅读全文
摘要:看到一篇中文文章《C/C++, Java: Java的new[]与C++的new[]》很有意思。public class Test extends JPanel { private static final long serialVersionUID = 4767050156491994899L; public static void main(String[] args) { AnimApp[] array = new AnimApp[3]; // 没有执行构造函数, 在这里只是申请了空间. array[0] = new AnimApp(3); // ...
阅读全文
摘要:看到一篇文章《Extra, Extra - Read All About It: Nearly All Binary Searches and Mergesorts are Broken》说的是很多二分查找都有bug,包括《编程珠玑》上给出的实现。这个bug也曾经出现在java.util中。典型的Java版实现是int binarySearch(int a[], int key, int length) { int low = 0; int high = length - 1; while (low <= high) { int mid = (low + high) / 2; int m
阅读全文
摘要:以前只闻RTTI(Run-Time Type Identification,运行时类型识别),并未通达。参考文章《typeid详解》的相关内容,获知了些知识。如下是所有的测试代码源码说明一切。typeid
阅读全文
摘要:想试用SQLite的相关功能,于是就测试了下。我是在CodeBlocks下配置VS2010而做的,但是最新CodeBlocks的VS2010配置不是对,链接说找不到kernel32.lib,于是重新修复安装VS2010(折腾人的大工程),后来参考了CodeBlocks在win7+Vs2010环境下的配置 终于搞定,其实是kernel32.lib移到了“Microsoft SDKs”中了。到SQLite主要上下载,参考在VS2010下由DEF和DLL文件生成SQLite3.lib ,生成lib文件(就是命令LIB /DEF:sqlite3.def /machine:IX86的使用),新建工程,配
阅读全文
摘要:完美笔试的最后一题,只写了个+,准备用+模拟*的,回来看网上的资料,发现自己写得不对,于是回来花写时间写了下,各种心得。实现思路很简单,用数组实现,同时用一个len表示占用空间,由于加法和乘法都要求对齐,所以按照数字的逆序表示要方便些,若要输出的话逆向输出即可(在此复习了下ostream 和friend 语义)。数组是字符串的集合,要保持字符串的特有的'\0'结尾符。下面的代码不求完美,但求思路,所以用了固定数组,同时不支持负数形式。加法的实现比较简单,有点类似于归并的代码,注意最后要更新len和末尾结束符。乘法借用的是网上的思路,用了一个临时数组(注意大小,如何证明不会溢出?
阅读全文
摘要:关于二叉树节点的经典定义struct Node { int data; struct Node *left; struct Node *right;};后序非递归实现void PostTravelNoRecure(struct Node *root){ stack<struct Node*> st; struct Node * prev = NULL;//最近一次访问节点 struct Node * pNode = root;//最近一次访问节点 while(pNode||!st.empty()) { //找到最左节点...
阅读全文
摘要:虽然知道怎么做,但是还是做一遍啦。结果调试了两个多小时,真崩溃。/* * ===================================================================================== * * Filename: intlist.h * * Description: * * Version: 1.0 * Created: 09/16/2011 02:56:13 AM * Revision: none * Compiler: gcc * * ...
阅读全文
摘要:今天看某个面试题,实现memcpy,吓了一跳,怎么还要求考虑内存重合啊。印象中不是这样子的啊。于是将以前写的代码翻出来看了看。在这里重新温习下。1.memmove函数原型:void*memmove(void*dest, constvoid*source, size_t count)返回值说明:返回指向dest的void *指针参数说明:dest,source分别为目标串和源串的首地址。count为要移动的字符的个数函数说明:memmove用于从source拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。2.
阅读全文
摘要:C++中的空类,默认产生哪些类成员函数?[C++易]答:class Empty{public: Empty(); // 缺省构造函数 Empty( const Empty& ); // 拷贝构造函数~Empty(); // 析构函数 Empty&operator=( const Empty& ); // 赋值运算符 Empty*operator&(); // 取址运算符const Empty*operator&() cons...
阅读全文
摘要:遇到这样一道题,注释以及很清楚,覆盖是覆盖了,但是可以用using指令使其可见,并成功调用,注意灰显部分。#include <iostream>using namespace std;class Base{public: virtual void func(){cout<<"Base::func()"<<endl;} void gunc(){cout<<"Base::gunc()"<<endl;}};class Derived:public Base{public: void func(){co
阅读全文
摘要:abc说明:定义 del 函数的时候,abc 的析构函数未定义,因此不会调用。看如下代码,试解释器运行结果#include <stdio.h>class abc;void del(abc *pobj){ delete pobj;}class abc{public: abc() { printf("abc\r\n"); } ~abc() { printf("~abc\r\n"); } }; int main(int argc, char *argv[]) { abc *pobj = new abc; de...
阅读全文
摘要:题目:类CMyString的声明如下:class CMyString{public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); CMyString& operator = (const CMyString& str);private: char* m_pData;}; 请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对象的状态不能改变。分析:首先我们来看一般C++教科书上给出的赋值运算符的重载...
阅读全文
摘要:Programming LanguagesCAPIBerkeley Socket APIData Structure used to store socked details1234567struct sockaddr_in6 {u_char sin6_len; // length of this structureu_char sin6_family; // AF_INET6u_int16m_t sin6_port; // Transport layer port #u_int32m_t sin6_flowinfo; // IPv6 flow informationstruct in6_ad
阅读全文

浙公网安备 33010602011771号