C语言学习
yanghangjun
南京大学电子科学与工程系
展开
-
C++编译器符号表有哪些内容?
C++编译器符号表有哪些内容?转自:http://blog.csdn.net/abortexit/article/details/1583306 很早就想写一篇关于符号表的学习小结,可是迟迟不能下笔。其一是因为符号表在编译器的设计中占有举足轻重的地位【我们在学习编译原理的时候更多的是注重principles,而没有关心一个编译器的实现,所以符号表讲解的也比较少】,编译阶段的每“遍”都转载 2012-05-19 14:28:40 · 942 阅读 · 0 评论 -
读写配置文件
配置文件如: (文件名为config.txt) file_in_L: good file_in_R: nice file_out_R: hi file_residual: good file_vector: very 则相应代码如下: char str[512]; char seps[] = " ,/t/n"; char *token; int i; char argv[5][20]; for(i=0;i转载 2010-10-11 11:11:00 · 458 阅读 · 0 评论 -
通用类与显示类说明
<br />利用显示类说明可以扩展通用类的用途。<br />测试代码:<br />#include<iostream><br />using namespace std;<br />//通用类<br />template <class T> class myclass{<br /> T x;<br />public:<br /> myclass(T a)<br /> {<br /> x=a;<br /> cout<<"This is in generic myclass"<<endl;<br /> }<原创 2010-06-19 14:50:00 · 423 阅读 · 0 评论 -
通用类
<br />测试代码:<br />#include<iostream><br />using namespace std;<br /><br />template <class type1,class type2>class myclass<br />{<br /> type1 i;<br /> type2 j;<br />public:<br /> myclass(){i=0,j=0;}<br /> void set_ij(type1 x,type2 y);<br /> void show();<br /原创 2010-06-10 11:41:00 · 712 阅读 · 0 评论 -
标准参数与模板函数共同使用
<br />测试代码:<br />#include<iostream><br />using namespace std;<br />template<class X>void func(X a,int num)<br />{<br /> int i;<br /> for(i=0;i<num;i++)<br /> cout<<' ';<br /> cout<<a<<endl;<br />}<br />int main()<br />{<br /> func(3.14,1);<br /> func(10,3原创 2010-06-01 19:18:00 · 654 阅读 · 0 评论 -
显式重载函数模板
#includeusing namespace std;template void swapped(X &a,X &b){ X temp; temp=a; a=b; b=temp; cout}template void swapped(int &a,int &b){ int temp; temp=a; a=b; b=temp; cout}int main(){ int i=1,j=2; float x=1.1,y=1.2; cout cout原创 2010-06-01 18:56:00 · 506 阅读 · 0 评论 -
带有两个通用类型的模板
<br />#include<iostream><br />using namespace std;<br />template <class type1,class type2><br />void myfunc(type1 x,type2 y)<br />{<br /> cout<<x<<' '<<y<<endl;<br />}<br />int main()<br />{<br /> int a=1,b=2;<br /> float x=1.1,y=1.2;<br /> myfunc(a,x);<br原创 2010-06-01 18:30:00 · 504 阅读 · 0 评论 -
模板
<br />模板的一般形式:<br />template <class Ttype> return_type function_name(parameter_list)<br /> <br />测试代码:<br />#include<iostream><br />using namespace std;<br />template <class X> void swapped(X &a, X &b)<br />{<br /> X temp;<br /> temp=a;<br /> a=b;<br /> b=原创 2010-06-01 18:23:00 · 349 阅读 · 0 评论 -
继承虚属性
<br />虚函数的性质:<br /> 无论虚函数被继承多少次,它仍然是虚函数;<br /> 虚函数是分层的。<br /> <br />测试代码:<br />#include<iostream><br />using namespace std;<br />class base<br />{<br />public:<br /> virtual void show(){cout<<"This is in base"<<endl;}<br />};<br />class derive1:publi原创 2010-06-01 11:48:00 · 611 阅读 · 0 评论 -
虚函数
<br />虚函数的参数要完全一致!这与重载函数的最大区别。<br />测试代码:<br />#include<iostream><br />using namespace std;<br />class base{<br />public:<br /> virtual void func()<br /> { <br /> cout<<"This is in base /n";<br /> }<br />};<br /><br /><br />class derive1:public base{<br /原创 2010-06-01 11:38:00 · 509 阅读 · 1 评论 -
函数模板重载
<br />测试代码:<br />#include<iostream><br />using namespace std;<br />template<class X>void func(X a)<br />{<br /> cout<<"In func_one/n";<br />}<br />template<class X>void func(X a,X b)<br />{<br /> cout<<"In func_two/n";<br />}<br />int main()<br />{<br /> i原创 2010-06-01 19:09:00 · 484 阅读 · 0 评论 -
纯虚函数(抽象类)
纯虚函数是没有在基类中定义的虚函数。形式为:virtual return_type func_name(parameter_list)=0;测试代码:#includeusing namespace std;class number{protected: int val;public: number(int x){val=x;} virtual void show()=0;};class hextype:public number{public: hextype(int x):number(x){} void原创 2010-06-01 11:58:00 · 518 阅读 · 0 评论 -
typedef详解(四大功能、二大陷阱)
<br />概述 是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。 编辑本段typedef用法小结<br /> 在C语言的情况下,与C++稍有出入。 <br /> 这两天在看程序的时候,发现很多地方都用到typedef,在结构体定义,还有一些数组等地方都大量的用到.但是有些地方还不是很清楚,今天下午,就想好好研究一下.上网搜了一下,有不少资料.归纳一下: <br /> 来源一:Using typedef to Curb Miscreant C转载 2010-10-15 18:06:00 · 1009 阅读 · 0 评论 -
代码阅读工具
<br />(摘自http://fky168.blog.163.com/blog/static/3786097200831033957620/)<br />一、Source Insight实用技巧:<br />Source Insight(下文的SI指的也是它)就是这样的一个东西:<br /> Windows下开发人员的至爱,功能强大,界面友好。支持语法高亮、符号跳转,还支持函数调用关系图显示。这是一个专业的编程环境,很多大公司都是使用它的。这个编辑器除支持完善的自定义功能外,几乎所有配置都能作个性化配置转载 2010-10-27 22:24:00 · 1357 阅读 · 0 评论 -
动态分配空间,地址为16的倍数(地址对齐)
<br />代码:<br />#include<stdio.h><br />#include<stdlib.h><br />void *av_malloc(unsigned int size)<br />{<br /> void *ptr = NULL;<br /> long int diff;<br /> ptr = malloc(size+16);<br /> if(!ptr)<br /> return ptr;<br /> diff= ((-(long)ptr -原创 2010-11-15 15:38:00 · 1410 阅读 · 0 评论 -
句柄类(引用计数)——采用中间类实现方式
参考代码:#include#includeusing namespace std;class B{public: B(){} B(const string &n):name(n){} B(const char *n):name(n){} string getname(void) const{ return name; } B(const B &b)原创 2012-03-28 23:33:30 · 707 阅读 · 0 评论 -
strstr的实现
比较的简单,考虑也不是很周到,能用。直接上代码:char *mystrstr(const char *str, const char *s){ int i,j,k; int len1=strlen(str); int len2=strlen(s); for(i=0; i { j=0; k=i; while( (j { while( *原创 2012-02-04 22:26:00 · 442 阅读 · 0 评论 -
使用varargs.h/stdarg.h 实现可变参数函数
需求: 自己设置一个形如 printf()这样的函数,其函数的参数个数是可变的。第一个参数为字符串,里面有其他形参的数据类型信息。参考代码如下:#include#includevoid myPrintf (va_alist) va_dcl{ va_list ap; char *format; va_start(ap); format = va_arg(ap,ch原创 2011-12-29 12:47:00 · 2562 阅读 · 0 评论 -
printf系列详解
printf系列主要有三个函数: printf , fprintf , sprintf 。 各自的功能很好记住,printf 向标准输出 输出内容; fprintf,就是向filestream(文件流)输出;sprintf,就是输出到string(字符数组中)。 各自的形式为: printf就不说了, fprintf(文件流,“”,参数); sprintf(字符数原创 2011-12-29 11:00:01 · 2616 阅读 · 0 评论 -
VC++中的句柄
句柄(handle)是一种资源的标识; 操作系统要管理这些资源,都是通过句柄来找到对应的资源。 句柄有点类似于指针, 资源都会占用一定的内存,当我们需要使用这些资源的时候,就需要获得这些内存中的资源,通过句柄就可以访问这些内存。按资源的类型,可以将句柄细分成 图标句柄(HICON),光标句柄(HCURSOR),窗口句柄(HWND),应用程序实例句柄(HINSTANCE)。原创 2012-01-10 20:31:18 · 1900 阅读 · 0 评论 -
使用errno检测错误
errno在C中是定义为整形的。当系统调用发生错误时,会修改errno的值。errno的值不同,对应的错误也不同。参考代码:int main(){ FILE * fp= fopen("hello.txt","r"); if(fp == NULL) { printf("%d\n",errno); perror(0); } return 0;}原创 2011-12-27 21:10:13 · 675 阅读 · 0 评论 -
缓冲输出
使用setbuf,将输出缓冲。我们可以自己设置缓冲区的大小。当缓冲区满了,或者我们自己调用fflush()时,才会输出。参考代码#include#includechar buf[BUFSIZ];int main(){ memset(buf,0,BUFSIZ); setbuf(stdout,buf); printf("hello"); Sleep(3000原创 2011-12-27 20:57:55 · 604 阅读 · 0 评论 -
linux中实现getch函数
思想是把终端设置为非缓存 #include #include #include #include #include int getch(void); int main(void) { char ch; printf("Input a char:"); fflush(stdin);翻译 2011-11-14 11:43:40 · 1132 阅读 · 0 评论 -
二叉树遍历递归实现
<br />#include<stdio.h><br />#include<stdlib.h><br />#define flag int<br />#define L 0<br />#define R 1<br />typedef struct tree{<br /> struct tree *lchild;<br /> int data;<br /> struct tree *rchild;<br />} TREE;<br /> <br />TREE * Init_tree(int data)<br /原创 2011-03-15 12:06:00 · 629 阅读 · 0 评论 -
汉诺塔问题求解
<br />要求:碟子的个数为n,把它从x通过y全部搬到z中。<br /> <br />思路:若n==1,直接从x搬到z;<br /> 否则,先借助z把n-1个从x搬到y,在把第n个从x中搬到z中,再借助x,把y中n-1个搬到z中<br /> <br />测试代码如下:<br />#include<stdio.h><br />void hanoi(unsigned char n,char x,char y,char z);<br />int main()<br />{<br /> unsi原创 2011-03-08 13:21:00 · 855 阅读 · 0 评论 -
随机数生成
<br />srand((unsigned)time(NULL));<br />srand()是为以后的rand()提供一个种子,然后随机数rand()根据这个种子产生,如果不写srand(),默认值为srand(1),也就是为rand()提供为1的<br />种子,如果要产生随机数,那么每次产生的种子必须不相同,这个时候我们就可以用流逝的时间作为种子,srand((unsigned)time(NULL));这条语<br />句,它返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒.<br原创 2010-11-22 14:33:00 · 524 阅读 · 0 评论 -
类的继承
<br />类继承的方法:<br />Class derived_class_name : access base_class_name{};<br /> <br />其中access为访问限定符。<br />当一个基类的访问限定符为public时,基类的所有共有成员将成为派生类的公有成员,基类的所有保护成员将成为派生类的保护成员。然而,基类的私有元素将总是为基类专有,不能被派生类访问。<br /> 当一个基类的访问限定符为private时,基类的公有成员和保护成语将变成派生类的私有成员原创 2010-05-31 16:15:00 · 471 阅读 · 0 评论 -
C++多态性(早期绑定、后期绑定)
编译时,多态性是通过重载函数与重载运算符实现的。运行时,多态性是通过使用继承和虚函数实现的。原创 2010-06-01 09:53:00 · 2165 阅读 · 0 评论 -
虚基类
<br />一个基类,有两个派生类都继承它。最后还有一个类继承那两个派生类。那么最原始的基类就被继承了两次,这会引入二义性。为使在最后派生类中只有一个基类,使用虚基类可以达到这个效果<br /> <br />测试代码:<br />#include<iostream><br />using namespace std;<br />class base{<br />public:<br /> int l;<br />};<br />class derive1: virtual public base{<br /原创 2010-06-01 09:50:00 · 567 阅读 · 0 评论 -
动态分配内存
动态分配内存:测试代码:#include#includeusing namespace std;class myclass{ int num; char name[80];public: myclass(int x,char *s) { num=x; strcpy(name,s); } ~myclass() { cou原创 2010-05-16 22:03:00 · 937 阅读 · 0 评论 -
指向派生类型的指针
#includeusing namespace std;class base{ int a,b;public: void set_ab(int x,int y){this->a=x;b=y;} void show(){cout};class derived:public base{ int c;public: void set_c(int x){c=x;} void show_c(){co原创 2010-05-15 20:41:00 · 454 阅读 · 0 评论 -
作用域分辨符 ::
测试代码:#includeusing namespace std; int i=1; int main(){ int i; i=10; cout { int i; i=100; cout }原创 2010-05-15 19:27:00 · 1871 阅读 · 0 评论 -
静态类成员
测试代码:#includeusing namespace std; class myclass{ int little;public: static int num; myclass(){num++;} ~myclass(){num--;} static void init(int i){num=i原创 2010-05-15 19:23:00 · 586 阅读 · 0 评论 -
友元函数
测试代码:#includeusing namespace std;class A;class B{ int flag;public: B(); ~B(); void chang_flag(int i); friend void check_flag(A a,B b);};class A{ int flag;public: A(); ~A(); void change_flag(in原创 2010-05-11 22:27:00 · 459 阅读 · 0 评论 -
程序中禁用一些标准函数的方法
基本思路就是把那些想禁用的函数define到其他语句。测试代码如下:#includeusing namespace std;#define printf coutint main(){ printf("hello/n"); return 0;} 运行结果就是:显示 Please use cout原创 2010-05-11 15:56:00 · 766 阅读 · 0 评论 -
匿名联合(anonymous union)
C++中支持匿名联合。测试代码如下:#includeusing namespace std;int main(){ union{ short num; char c; }; num=0x31; cout cout c=A; cout cout return 0;}原创 2010-05-11 15:54:00 · 1244 阅读 · 0 评论 -
C++类第一次尝试
很简单的代码。主要体现类的构造函数与系构函数。代码如下: #includeusing namespace std;class myclass{ int a,b;public: myclass(); ~myclass(); void myprintf();};myclass::myclass(){ cout a=0; b=1;}myclass::~myclass(){ cou原创 2010-05-11 15:01:00 · 331 阅读 · 0 评论 -
const关键字
const有很多好处: 1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。 3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变转载 2009-12-01 21:49:00 · 467 阅读 · 0 评论 -
串和字符串函数
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 串和字符串1.isalnum#includeintisalnum(int ch);函数是判断字符是否是字母或数字。若是,返回非0值。否则返回0;原创 2009-11-23 14:53:00 · 484 阅读 · 0 评论 -
visual studio 2008 c99
是不是visual studio 2008 的编译器还不支持c99?小弟刚编的简单程序中用到求立方值。我用函数cbrt()说有问题^^.不知道怎么在vs2008里面支持c99。希望大侠忙帮了。小弟在此感谢!原创 2009-11-23 13:31:00 · 2151 阅读 · 0 评论