C语言
songxueyu
这个作者很懒,什么都没留下…
展开
-
C与指针学习笔记——回调函数与转移表
回调函数:这是一个没有意义的例子。#include "stdafx.h"void func(int n,int num1,int num2,int (*fp)(int,int)){int a=n*rand()%100;printf("rander is %d \n",a);num1=a*num1;num2=a*num2;printf("result is %d原创 2013-02-25 22:24:54 · 645 阅读 · 0 评论 -
打开汇编之门
原文作者:Tony BaiTony Bai原文地址:http://bigwhite.blogbus.com/logs/1587340.html工作这么长时间,一直在C语言这一层面上钻研和打拼,日积月累,很多关于C的疑惑在书本和资料中都难以找到答案。程序员是追求完美的一个种群,其头脑中哪怕是存在一点点的思维黑洞都会让其坐卧不宁。不久前在itput论坛上偶得《Computer System转载 2013-09-26 10:14:01 · 757 阅读 · 0 评论 -
二维数组和二维指针
入职一年了,这一年自己学到许多,但是忘记也很多,于是决定定下心来整理以前学到的,并且继续学习 二维数组和二级指针,这真是头疼的问题,困扰了我好几次, 先转一下wanpengcoder的二维数组和二级指针 前两天写个程序,传参数的时候想传个二维数组进去,结果悲剧了,函数写成Fun (int **p){},原来没有这么写过,以为这么写也是对转载 2013-09-25 22:30:19 · 782 阅读 · 0 评论 -
字典序法生成全排列
/* 用字典序法生成全排列*/#include#includevoid generate_i(int *p,int n,int *i){ int j=n; while(p[j-1]>=p[j]){ j--; } *i=j;}void generate_j(int *p,int n,int i,int *j){ int k=n; while(p[i-1]>=p[原创 2013-10-16 23:11:57 · 1116 阅读 · 0 评论 -
序数法生成全排列
/* 序数法生成全排列*/#include#include//注意:为了更好理解,a数组的实际长度为n,p数组的实际长度为n+1,a[0]和p[0]弃之不用//生成a1,a2,a3……void generate_a(int *a,int N,int n){ int i; for(i=1;N>0;i++){ a[i]=N%(i+1); N=N/(i+1); } wh原创 2013-10-16 23:10:47 · 3140 阅读 · 0 评论 -
运用Caley定理恢复树
n个有标号1,2,……,n的顶点的树的数目等于n^(n-2)。以下程序由用户输入顶点的数目然后得出所有可能的树并输出到文件里。#include#include//事实上,每次只要获得d序列和f序列的第一个元素就可以了,但是为了更明显地表示出来,还是全部生成了d和f序列//设置数组array为v值,len为数组长度void reset_array(int *array,int原创 2013-10-12 14:13:21 · 803 阅读 · 0 评论 -
C与指针学习笔记——可变参数和printf函数
#include#includeint m_sum(int num,...){ va_list var; int count; int sum=0; va_start(var,num); for(count=0;count<num;count++) { sum+=va_arg(var,int); } va_end(var); return sum;}int ma原创 2013-07-17 23:40:45 · 885 阅读 · 2 评论 -
函数的调用规则(__cdecl,__stdcall,__fastcall, __pascal, __thiscall)
原文:http://www.360doc.com/content/11/0402/17/6295074_106726950.shtml关于函数的调用规则(调用约定),大多数时候是不需要了解的,但是如果需要跨语言的编程,比如VC写的dll要delphi调用,则需要了解。 microsoft的vc默认的是__cdecl方式,而windows API则是__std转载 2013-12-27 09:46:04 · 662 阅读 · 0 评论 -
不用循环从0计数到1000
有没有&运算符都可以原创 2013-12-27 10:13:26 · 826 阅读 · 0 评论 -
<转>穿越沙漠
Problem Description一辆吉普车来到 x 公里宽的沙漠边沿 A 点,吉普车的耗油量为 1 升 / 公里,总装油量为 500 升。通常,吉普车必须用自身油箱中的油在沙漠中设置若干个临时储油 点,才能穿越沙漠的。假设在沙漠边沿 A 点有充足的汽油可供使用,那么吉普车从 A 点穿过这片沙漠到达终点 B ,至少要耗多少升油。请编写一个程序,计算最少的 耗油量(精确到小数点后 3 位转载 2014-04-07 20:20:32 · 949 阅读 · 0 评论 -
组合的生成
/* 组合的生成*/#include#includevoid generate_i(int *c,int n,int r,int *i){ int j; for(j=r;j>=1;j--){ if(c[j]<(n-r+j)){ break; } } *i=j;}void set_cj(int *c,int r,int i){ int j; for(j原创 2013-10-17 09:30:19 · 995 阅读 · 0 评论 -
指针和数组相同吗?
在看《C专家编程》第四章时,没看明白,只知道指针和数组在引用的时候是不一样的(这只是两者区别之一)。今天做了个实验,终于发现了其中的奥妙。首先有一个文件test6.c,里面只有一个定义:char *p="abcdefgh";然后在test7.c里是这样:#includeextern char *p;void main(){ printf("%x\n",p原创 2013-09-26 11:46:13 · 847 阅读 · 0 评论 -
我也来说说container_of(或者list_entry)
还是从头说起吧,也给自己记一下。你是怎么定义链表的?如果昨天你问我这个问题,我大概会写出以下的代码:struct dog{unsigned char name[10];struct dog*prev;struct dog *next;}但是内核可不能这么做,(以前确实是这么做的,从2.1开始就使用了官方的实现方法)因为这样的链表只适用于这一个结构体,你以后要想实现一个str原创 2013-09-21 13:54:58 · 973 阅读 · 0 评论 -
C语言中的typeof关键字
原文地址:http://module77.is-programmer.com/posts/22102.htmltypeof关键字是C语言中的一个新扩展。typeof的参数可以是两种形式:表达式或类型。下面是使用表达式的的例子: typeof(x[0](1)这里假设x是一个函数指针数组,这样就可以得到这个函数返回值的类型了。如果将typeof用于表达式,则该转载 2013-09-20 23:34:51 · 837 阅读 · 0 评论 -
C与指针学习笔记——函数指针
int f(int);这是一个返回值为整形,参数类型为整形的函数原型。int *f(int);首先看(int)知道这是一个参数为整形的函数,再看间接访问符*知道这是一个返回值为整形指针的函数。int (*f)(int);第一个括号迫使间接访问在函数调用之前进行,说明这是一个指向函数的指针。就叫函数指针。注意在使用函数指针之前要有该函数的原型。如下:#include "stdaf原创 2013-02-10 22:35:17 · 420 阅读 · 0 评论 -
C与指针学习笔记——有效的指针
看这个程序#include "stdafx.h"char *words(){char p[]="hello world";//char *p="hello world";return p;}void main(){char *sr=NULL;sr=words();printf("%s",sr);}结果为乱码。而如果改成原创 2013-03-08 18:42:18 · 760 阅读 · 0 评论 -
C与指针——记得要加上fflush(stdout)
学习linux进程编程的时候,发现一个奇怪的问题:好像程序没有执行就退出了——因为写的一些printf()语句没有显示,还好突然想到了fflush(FILE *p)。fflush(FILE *p)是把FILE*p指向的流的输出立即写入并清空,所以加上fflush(stdout)就是立即显示到屏幕上。代码如下:#include#include#includevoid main原创 2013-03-14 20:01:10 · 993 阅读 · 0 评论 -
C语言错误 error C2059
如果你也碰到这个错误,并且也排除了参数写错等原因,那么提醒你:可能你定义这个函数的名字系统已经使用了!换个名字试试!原创 2013-05-12 15:44:05 · 6957 阅读 · 1 评论 -
C与指针学习笔记——命令行参数和神秘函数
这是学习C与指针时写的一个命令行参数和神秘函数的融合的小程序。// Pointer1.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #includevoid mystery(int n){n+=5;n/=10;printf("%s\n","**********"+10-n);}void t原创 2013-02-03 00:43:20 · 561 阅读 · 0 评论 -
详解C语言中的const
发现百度百科里讲const讲得很好。原址:http://baike.baidu.com/subview/1065598/5048428.htm?fromId=1065598&from=rdtselfconst是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序转载 2013-09-29 19:54:35 · 757 阅读 · 0 评论 -
Linux curses库
相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色, 即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式的画面也较为美观. 对Programming 有兴趣的朋友一定对此感到好奇, 也许他能在 PC上用Turbo C轻易地写出类似的程式, 然而, 但当他将相同的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误. 其实, 原因很简单, 他使用转载 2013-09-30 10:06:57 · 759 阅读 · 0 评论 -
关于文件结束符EOF
文章转自:http://blog.csdn.net/yinjiabin/article/details/8183226但它转自谁就不知道了EOF 是 End Of File 的缩写。在 C 语言中,它是在标准库中定义的一个宏。人们经常误认为 EOF 是从文件中读取的一个字符(牢记)。其实,EOF 不是一个字符,它被定义为是 int 类型的一个负数(比如 -1)。EO转载 2013-09-15 22:02:01 · 961 阅读 · 0 评论 -
《C专家编程》读后记
1.const char **p和char **p是不相容的类型。因为前者说明指向的是const char*类型,而后者是指向char*类型。所以它们之间赋值操作会引起编译警告。2.要特别注意类型提升的问题。3.sizeof返回值是无符号的。4.int a=sizeof *q。q是指针,那么返回值是q所指向的对象的类型的字节数。5.为了避免优先级问题原创 2013-09-29 20:55:00 · 701 阅读 · 0 评论 -
#define LIST_HEAD_INIT(name) { &(name), &(name) } what?!!
刚开始看点源码,完全被惊呆了。。。这才叫高手写的代码啊!有朝一日咱也要到达那样的高度#define LIST_HEAD_INIT(name) {&(name),&(name)} 是什么意思?光看这个宏一辈子也看不明白,源文件是这么定义使用的#define LIST_HEAD_INIT(name) { &(name), &(name) }#define LIST_原创 2013-09-20 23:02:50 · 5746 阅读 · 0 评论 -
异或运算交换两个元素位置,不需要额外空间
#define TYPE charvoid replace_element(TYPE *a,TYPE *b){ *b=*a^*b; *a=*a^*b; *b=*a^*b;}void replace_array(TYPE array[],unsigned int len){ unsigned int first,last; for(first=0,last=len-1;fir原创 2013-10-02 11:01:51 · 1260 阅读 · 0 评论