
C/C++
thinkinwm
Do not pray for easy lives. Pray to be stronger men.
展开
-
数组指针和指针数组的区别
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;转载 2012-10-25 21:13:38 · 424 阅读 · 0 评论 -
pthread_create用法
http://www.cppblog.com/tuantuan/archive/2009/08/02/91970.html今天开始学习linux下用C开发多线程程序,Linux系统下的多线程遵循POSIX线程接口,称为pthread。#include int pthread_create(pthread_t *restrict tidp,转载 2013-03-19 09:56:20 · 613 阅读 · 0 评论 -
Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)
Unix IPC包括:管道(pipe)、命名管道(FIFO)与信号(Signal) 管道(pipe)管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;实现机制:管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条。管道的一端连接一个进程的输出。这个进程会向管道中放入信转载 2013-03-23 19:54:30 · 903 阅读 · 0 评论 -
socketpair的使用
http://blog.youkuaiyun.com/sunnyboychina/article/details/1884076建立一对匿名的已经连接的套接字socketpair函数概要如下:#include #include int socketpair(int domain, int type, int protocol, int sv[2]);sys/types.h文件需转载 2013-03-25 11:40:38 · 598 阅读 · 0 评论 -
C语言函数realloc
函数简介原型:extern void *realloc(void *mem_address, unsigned int newsize);语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。//新的大小一定要大于原来的大小,不然的话会导致数据丢失!头文件:#include stdlib.h> 有些编译器需要#include ,在TC2.0中可以使转载 2013-03-25 14:22:13 · 654 阅读 · 0 评论 -
fopen函数
C语言函数fopen函数简介函数功能:打开一个文件函数原型:FILE * fopen(const char * path,const char * mode);相关函数:open,fclose,fopen_s[1],_wfopen所需库:stdio.h>返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把转载 2013-03-25 20:54:29 · 642 阅读 · 0 评论 -
linux中select()函数分析
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式转载 2013-03-18 17:23:01 · 554 阅读 · 0 评论 -
signal(SIGPIPE, SIG_IGN)
当服务器close一个连接时,若client端接着发数据。根据TCP 协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。 根据信号的默认处理规则SIGPIPE信号的默认执行动作是terminate(终止、退出),所以client会退出。若不想客户端退出可以把SIGPIPE设为SIG_IGN转载 2013-03-23 19:49:18 · 797 阅读 · 0 评论 -
fgets函数
原型是char *fgets(char *buf, int bufsize, FILE *stream);参数:*buf: 字符型指针,指向将存储到的数据地址。bufsize: 整型数据,指明buf指向的字符数组的大小。*stream: 文件结构体指针,将要读取的文件流。功能:从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在bu转载 2013-03-25 21:00:18 · 1754 阅读 · 0 评论 -
fcntl 函数
表头文件#include #include #include fcntl.h>函数类型定义函数 int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);fcntl转载 2013-03-26 23:14:22 · 561 阅读 · 0 评论 -
setsid()
setsid-----------------------------------------------setsid命令linux常用的命令setsid命令的一般格式:setsid();说明:当进程是会话组长时setsid()调用失败。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与转载 2013-03-25 20:17:27 · 1581 阅读 · 0 评论 -
例解GNU C之零长数组与变长数组
http://blog.youkuaiyun.com/npy_lp/article/details/7009120 前言:计算机语言是编译器和程序员交流的依据和规范,GNU C是GCC特有的功能,在Linux内核中被广泛应用。 帮助文档:http://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/C-Extensions.html#C-Extens转载 2013-11-21 09:21:27 · 1108 阅读 · 0 评论 -
单链表实现
template class Link {public: Elem element; Link *next; Link(const Elem& elemval, Link* nextval = NULL) { element = elemval; next = nextval; } Link(Link* nextval =转载 2013-10-23 14:00:38 · 759 阅读 · 0 评论 -
顺序表的实现
template class AList : public List {private: int maxSize; int listSize; int fence; Elem* listArray;public: AList(int size=DefaultListSize) { maxSize = size; lis转载 2013-10-21 22:27:07 · 642 阅读 · 0 评论 -
stdio.h
/* * stdio.h * This file has no copyright assigned and is placed in the Public Domain. * This file is a part of the mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER转载 2013-10-17 17:24:04 · 1021 阅读 · 0 评论 -
va_list、va_start、va_arg、va_end宏的使用
当你的函数的参数个数不确定时,就可以使用上述宏进行动态处理,这无疑为你的程序增加了灵活性。Example:CString AppendString(CString str1,...)//一个连接字符串的函数,参数个数可以动态变化{ LPCTSTR str=str1;//str需为指针类型,因为va_arg宏返回的是你的参数的指针,但是如果你的参数为int等简转载 2013-10-17 14:21:39 · 970 阅读 · 0 评论 -
char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][], and so on
http://blog.163.com/digoal@126/blog/static/163877040201271195312138/本文测试环境 : X86-64 bit 架构的服务器CentOS x64 5.xgcc version 4.1.2 20080704指针和数组是C的比较难搞懂的知识点, 需要结合内存来学习, 非常感谢各位转载 2013-10-10 15:21:45 · 802 阅读 · 0 评论 -
c语言中static 用法总结
惨痛教训:假设在test.h中定义了一个static bool g_test=false;若test1.c和test2.c都包含test.h,则test1.c和test2.c分别生成两份g_test,在test1.c 中置g_test=true,而test2.c中仍然为false并未改变!shit!!一、c程序存储空间布局C程序一直由下列部分组成: 1)正文段——CP转载 2013-10-10 14:04:56 · 627 阅读 · 0 评论 -
快速排序算法
http://blog.youkuaiyun.com/v_JULY_v/article/details/6116297快速排序算法 作者 July 二零一一年一月四日------------------------------------------ 写之前,先说点题外话。每写一篇文章,我都会遵循以下几点原则:一、保持版面的转载 2013-10-05 16:46:08 · 855 阅读 · 0 评论 -
进程通信的实例--管道(pipe)
4.7.5 进程通信的实例--管道(pipe)1.管道pipe 进程通信的使用例子之一是UNIX系统的管道通信。UNIX系统从System V 开始,提供有名管道和无名管道两种通信方式,这里介绍无名管道。无名管道为建立管道的进程及其子孙提供一条以比特流方式传送消息的通信管道。该管道再逻辑上被看作管道文件,在物理上则由文件系统的高速缓冲区构成,而很少启动外设。发送进程利用文件系统转载 2013-03-23 20:17:36 · 14335 阅读 · 2 评论 -
execl函数
相关函数:execle, execlp, execv, execve, execvp1.表头文件:#include 2.函数定义:int execl(const char *path, const char *arg, ...);execl()用来执行参数path字符串所代表的文件路径, 接下来的参数代表执行该文件时传递的argv[0],argv[1]...转载 2013-03-25 20:06:52 · 774 阅读 · 0 评论 -
函数指针基础
函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的。函数指针有两个用途:调用函数和做函数的参转载 2013-03-05 17:30:59 · 571 阅读 · 0 评论 -
深入理解指针函数
1.指针函数的定义 顾名思义,指针函数即返回指针的函数。其一般定义形式如下: 类型名 *函数名(函数参数表列); 其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。转载 2013-03-05 16:19:50 · 550 阅读 · 0 评论 -
const
看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设计书转载 2012-11-04 12:44:59 · 382 阅读 · 0 评论 -
声明与函数、函数指针
概述 在很多情况下,尤其是读别人所写代码的时候,对 C语言声明的理解能力变得非常重要,而C语言本身的凝练简约也使得C语言的声明常常会令人感到非常困惑,因此,在这里我用一篇的内容来集中阐述一下这个问题。 问题:声明与函数 有一段程序存储在起始地址为 0的一段内存上,如果我们想要调用这段程序,请问该如何去做? 答案 答案是 (*(void转载 2013-03-05 16:22:50 · 534 阅读 · 0 评论 -
strcpy的一个标准实现
strcpy的一个标准实现:#include #include #include void strcpy(const char * src, char * dest) { assert(src != NULL); assert(dest != NULL); while (*src != '\0') {原创 2013-03-04 13:12:52 · 390 阅读 · 0 评论 -
一般情况下的数据存储顺序
#include union pw{ int i; char ch[2];} a;main(){a.ch[0]=13;a.ch[1]=0;printf(″%d\n″,a.i);}程序的输出结果是( ) A.13 B.14 C.208 D.209我来帮他解答满意回答2011-09-16 09:58共转载 2013-02-17 19:07:22 · 665 阅读 · 0 评论 -
C++ 运算符优先级
http://en.cppreference.com/w/cpp/language/operator_precedenceThe following table lists the precedence and associativity of C++ operators. Operators are listed top to bottom, in descending转载 2012-12-12 20:40:39 · 490 阅读 · 0 评论 -
c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast
dynamic_cast: 通常在基类和派生类之间转换时使用,run-time castconst_cast: 主要针对const和volatile的转换。static_cast: 一般的转换,no run-time check.通常,如果你不知道该用哪个,就用这个。reinterpret_cast: 用于进行没有任何关联之间的转换,比如一个字符指针转换为一转载 2012-11-07 19:03:55 · 300 阅读 · 0 评论 -
C语言符号扩展
int main(void){ unsigned int a = 0Xfffffff7; char *b = (char *)&a; printf("%08x", *b);}今天在网上看到这样一个题目。在VC++6.0环境下输出为:fffffff7VC++6.0是小端模式,即数据的高位放在高字节地址中,数据低位放在低字节地址中。如int a=0xf转载 2013-03-01 17:27:02 · 1518 阅读 · 0 评论 -
C++常见题目
1. C++中的struct与C语言中的struct有何区别在C语言中, struct仅用于定义复杂数据结构,也主是说它只能定义数据,它的成员只能是数据类型,不能直接定义方法函数。在C++中,struct除了C中的用途外,还可以像class一样,可以定义成员方法函数。2. struct与class的区别共同点:它们都可以定义面向对象中的类:定义成员数据和成员方法函数。区转载 2013-02-16 14:48:56 · 381 阅读 · 0 评论 -
prctl()函数应用
int prctl(int option,unsigned longarg2,unsigned long arg3,unsigned long arg4,unsigned long arg5)这个系统调用指令是为进程制定而设计的,明确的选择取决于option:PR_GET_PDEATHSIG :返回处理器信号; PR_SET_PDEATHSIG :arg2作为处理器转载 2013-03-25 16:20:31 · 2621 阅读 · 0 评论 -
cc、gcc、g++、CC的区别概括
http://blog.youkuaiyun.com/monkey_d_meng/article/details/5651608 gcc是C编译器;g++是C++编译器;linux下cc一般是一个符号连接,指向gcc;gcc和g++都是GUN(组织)的编译器。而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Linux/Unix都是大小写敏感的系统,这点一定要注意。cc转载 2013-03-24 16:19:41 · 810 阅读 · 0 评论 -
calloc
函数简介calloc是一个C语言函数函数名: callocvoid *calloc(unsigned n,unsigned size);功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。跟malloc的区别:calloc在动态分配完内存后,自动初始化该内存空间为零,而ma转载 2013-03-30 22:27:31 · 653 阅读 · 0 评论 -
fd_set 用法
select()函数主要是建立在fd_set类型的基础上的。fd_set(它比较重要所以先介绍一下)是一组文件描述字(fd)的集合,它用一位来表示一个fd(下面会仔细介绍),对于fd_set类型通过下面四个宏来操作: fd_set set; FD_ZERO(&set); /* 将set清零使集合中不含任何fd*/转载 2013-03-30 21:42:49 · 673 阅读 · 0 评论 -
C++ 二维数组与元素为指针的数组
“元素为指针的数组”比指针数组的说法好,不然哪天犯二就不知道这到底是什么了,看英语就很清楚: pointer to array 对应int (*p)[10]array of pointers 对应int *p[10]最简单的理解方式就是,假设你是编译器,你要看看自己是否能够合理的解释这些语句?练习1:char array[5][10];char (*p原创 2012-10-25 21:32:29 · 1614 阅读 · 0 评论 -
运算符优先级练习
执行以下语句会打印出? int arr[] = {6, 7, 8, 9 ,10}; int* ptr = arr; *(ptr++) += 123; cout<<*ptr<<endl;先看看运算符的优先级,一般容易考察的是红色的这几个:PrecedenceOperatorDescriptionAssociativity原创 2013-03-01 17:13:20 · 1008 阅读 · 0 评论 -
&a+1
下面程序的输出结果是多少?#include "stdafx.h" #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int a[5]={1,2,3,4,5}; int *ptr=(int*)(&a+1); printf("%d转载 2013-03-01 16:44:47 · 550 阅读 · 0 评论 -
__attribute__机制介绍
http://blog.youkuaiyun.com/ithomer/article/details/65667391. __attribute__GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Att转载 2013-11-25 09:27:42 · 496 阅读 · 0 评论