
c语言
qq546770908
这个作者很懒,什么都没留下…
展开
-
函数指针及其的运用
转自 http://www.cnblogs.com/uniqueliu/archive/2011/07/27/2118619.html=========================引子========================= 我们都知道,数组名就是指向数组第一个元素的常量指针(详见《数组拾遗》)。同理,对于一个函数而言,函数名也是指向函数第一条指令的常量指针。转载 2015-03-26 15:01:49 · 281 阅读 · 0 评论 -
自己敲快排序 出错
#includeint a[5]={72,6,57,48,85};/*void quick_sort(int s[], int l, int r){ if (l { //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1 int i = l, j = r, x = s[l];转载 2015-03-21 11:22:34 · 353 阅读 · 0 评论 -
32位CPU所含有的寄存器
4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。32位CPU有4个32位转载 2015-03-29 09:46:40 · 418 阅读 · 0 评论 -
堆和栈的区别 (转贴)
堆和栈的区别 (转贴) 非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由转载 2015-03-29 11:02:39 · 348 阅读 · 0 评论 -
sizeof应用于虚参形式的数组时,得到的结果是4(指针大小) k&r 5-4
1.8 大部分编译程序在编译的时候就把sizeof计算过了,这就是sizeof(x)可以用来定义数组长度的原因。下面数组a2的长度是根据a1的长度来定的。1234int a1[10];cout sizeof(a1)/sizeof(int) // 输出:10int a2[sizeof(a1)/sizeof(int)];c转载 2015-03-22 20:06:30 · 557 阅读 · 0 评论 -
__stdcall,__cdecl,_cdecl,_stdcall,__fastcall,_fastcall 区别简介
转自 贴吧 http://bbs.youkuaiyun.com/topics/390451531三者区别一览表 __stdcall__cdecl__fastcall参数传递方式右->左 压栈右->左 压栈左边开始的两个不大于4字节(DWORD)的参数分别放在ECX和EDX寄存器,其余的参数仍转载 2015-03-29 10:23:58 · 325 阅读 · 0 评论 -
int main和 void main
“The C programming Language(《C程序设计语言》)用的就是 main( )。”--- 这是因为第一版的C语言只有一种类型,那就是int,没有char,没有long,没有float,…………既然只有一种类型,那么就可以不写,后来的改进版为了兼容以前的代码于是规定:不明确标明返回值的,默认返回值为int,也就是说 main()等同于int main(),而不是等同于void转载 2015-03-29 22:37:31 · 918 阅读 · 0 评论 -
关于流和缓冲区的理解
原文链接:http://bbs.chinaunix.net/viewthread.php?tid=588099各大权威对流的说法有些不一致,我认为流既是数据的源或目的地的抽象,也是源和目的地之间流动信息的表示。但流起码都暗含以下的几个方面:1、流是一个抽象的概念,是对信息的一种表达;在程序中,流就是对某个对象输入输出信息的抽象。就像运输工具是对一切运动载体的抽象一样。2、流是一转载 2015-03-30 22:47:51 · 2392 阅读 · 0 评论 -
scanf()、getch()、getchar()、getc()、gets()
转自 http://blog.sina.com.cn/s/blog_67d069a90100ul7h.html头文件例子:int a;scanf(“%d”,&a); //输入取地址,即变量地址printf(“%d\n”,a); //输出指定对象,即变量名scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf转载 2015-03-30 22:15:38 · 1004 阅读 · 0 评论 -
内存对齐 与上一篇结构体内存分配有关
转自http://www.cnblogs.com/kex1n/archive/2009/06/16/2286527.html一.内存对齐的初步讲解内存对齐可以用一句话来概括:“数据项只能存储在地址是数据项大小的整数倍的内存位置上”例如int类型占用4个字节,地址只能在0,4,8等位置上。例1:#include struct xx{ char b;转载 2015-04-21 21:25:57 · 373 阅读 · 0 评论 -
联合体union 与结构体struct
void test (){ union V { struct X { unsigned char s1:2; // :2 指 占两个字符?是两个bit。若是int 占多少? unsigned char s2:3; unsigned cha转载 2015-04-21 18:53:20 · 760 阅读 · 0 评论 -
小数的二进制表示,阶码
在机器中表示一个浮点数时需要给出指数,这个指数用整数形式表示,这个整数叫做阶码,阶码指明了小数点在数据中的位置。中文名 阶码 外文名exponent 阶码:对于任意一个二进制数N,可用N=S×2P表示,其中S为尾数,P为阶码,2为阶码的底,P、S都用二进制数表示,S表示N的全部有效数字,P指明小数点的位置。当阶码为固定值时,数的这种表示法称为定转载 2015-05-04 21:32:57 · 12823 阅读 · 0 评论 -
二维数组 malloc
如果要给二维数组(m*n)分配空间,代码可以写成下面:char **a, i;// 先分配m个指针单元,注意是指针单元// 所以每个单元的大小是sizeof(char *)a = (char **) malloc(m * sizeof(char * ));// 再分配n个字符单元,// 上面的m个指针单元指向这n个字符单元首地址for(i = 0; i a[i] =转载 2015-06-17 17:34:09 · 624 阅读 · 0 评论 -
再学习 break&continue
http://blog.sina.com.cn/s/blog_6efbf39c0100nfxh.html1.break语句break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句一般形式: break;注意:break语句不能用于循环语句(for,while,do while,)和switch语句之外的任何其他语句中转载 2015-06-17 19:15:56 · 484 阅读 · 0 评论 -
select、poll、epoll之间的区别总结[整理] + 知乎大神解答
http://www.cnblogs.com/Anker/p/3265058.html select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也转载 2016-11-08 15:37:15 · 24121 阅读 · 1 评论 -
c语言中swap问题小结
c语言中swap问题小结2012-04-05 12:10:08 分类: C/C++swap:实现交换的话,得传地址过去进行交换点击(此处)折叠或打开#includestdlib.h>#includestdio.h>void swap1(int x,int y){ int temp; temp=x; x=y;转载 2015-03-21 11:36:35 · 644 阅读 · 0 评论 -
快排序 挖坑填数
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速排序转载 2015-03-21 08:55:42 · 511 阅读 · 0 评论 -
assert()函数用法总结
转自 http://www.cnblogs.com/ggzss/archive/2011/08/18/2145017.htmlassert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include assert.h>void assert( int expression ); assert的作用是现计算表达式 expression转载 2015-03-26 19:38:47 · 317 阅读 · 0 评论 -
struct和typedef struct彻底明白了
分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实际上就是转载 2015-03-20 10:09:08 · 603 阅读 · 1 评论 -
auto static register
1简介编辑自动变量,只在定义它们的时候才创建,在定义它们的函数返回时系统回收变量所占存储空间。对这些变量存储空间的分配和回收是由系统自动完成的。一般情况下,不作专门说明的局部变量,均是自动变量。自动变量也可用关键字auto作出说明。例如:void f()/**/{/**/auto int c=3;/*c为自动变量*/int x=2;/*x未说明存储类型,则为缺省类型(自动)*/转载 2015-03-20 11:21:47 · 308 阅读 · 0 评论 -
交换两个数
交换两个数int a=8,b=2; 最普通的方法:int temp=a,a=b,b=temp,最简单最常用的,不多说。 稍微高级一点的:a=a+b b=a-b a=a-b 再高级一点的位运算:a=a^b b=a^b a=a^b 这是为什么? 因为异或运算有一个特点,如下10^8=2转载 2015-03-20 09:31:01 · 321 阅读 · 0 评论 -
typedef和define具体的详细区别
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:#define PI 3.1415926程序中的:area=PI*r*r 会替换为3.1415926*r*r如果你把#define语句中的数字9 写成字母g 预处理也照样带入。2)typedef是在编译时处理的。它在自己的作转载 2015-03-20 10:04:33 · 307 阅读 · 0 评论 -
sizeof运算符和size_t类型
sizeof运算符和size_t类型*sizeof的作用sizeof是c的运算符之一,用于获取操作数被分配的内存空间,以字节单位表示.这里指的操作数,可以是变量,也可以是数据类型,如int,float等.所以就可以通过它来获取本地c库定义的基本类型的范围。 *sizeof的使用1.对于一般变量,形式2种:sizeof a 或 sizeof(a);2.对于数据类型,必转载 2015-03-20 10:15:07 · 2804 阅读 · 0 评论 -
预处理器,编译器,汇编器和链接器
预处理器会处理相关的预处理指令,一般是以"#"开头的指令。如:#include "xx.h" #define等。编译器把对应的*.cpp翻译成*.s文件(汇编语言)。 汇编器则处理*.s生成对应的*.o文件(obj目标文件)最后链接器把所有的*.o文件链接成一个可执行文件(?.exe)转自 http://www.cnblogs.com/maomaohhmm/archive/20转载 2015-03-27 10:50:51 · 585 阅读 · 0 评论 -
C语言字节对齐
转自 http://blog.youkuaiyun.com/21aspnet/article/details/6729724/不懂再看 http://www.bubuko.com/infodetail-263205.html一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的转载 2015-03-27 15:34:27 · 389 阅读 · 0 评论 -
快排序qsort
算法介绍编辑快排图设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=转载 2015-03-20 15:45:23 · 329 阅读 · 0 评论 -
快排序--交换
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比转载 2015-03-20 22:27:34 · 307 阅读 · 0 评论 -
fprintf与stderr、stdout的使用
转自 http://blog.sina.com.cn/s/blog_912673ce01013qq9.htmlfprintf()中的 stderr说明 先看一个小例子:---------------------------------------------#include void main(){fprintf(stderr,"can't open i转载 2015-03-27 21:38:17 · 4063 阅读 · 1 评论 -
C语言中可变参数的用法——va_list、va_start、va_arg、va_end参数定义
摘自 http://zhidao.baidu.com/link?url=fRkRC7pwXJ4DfhP3Vuf9AWyUE2Tidsm_0YWCctcZUH5_yFy8oq_1sKi-4UySEQdB38h9Lna6qNJcYPEcZ7TYRa#include // 必须包含的头文件int Add(int start,...) // ...是作为占位符{ va_l转载 2015-03-28 10:51:23 · 510 阅读 · 0 评论 -
参数的引用传递 swap(int &x,int &y)
看题三的代码:01#include "stdio.h"02 03void Exchg3(int&x, int &y) /* 注意定义处的形式参数的格式与值传递不同 */04{05 inttm转载 2015-03-21 16:16:42 · 3803 阅读 · 0 评论 -
少走弯路,学好C语言的推荐途径
为什么要学习C语言?为什么要学习、使用C语言?为什么要学习一个可能比自己都岁数大的编程语言?选择一门编程语言,“为什么而学”这个目的是最重要的,目的不明确就没法学好。这也是为什么很多学生朋友在大学里必修C语言却觉得没学明白的原因。因为学习的目的不明确,学习当然也没有动力。还有一个原因是C语言是工程实践性很强的语言,它不是来自某个研究所某个大学学院,而是实实在在从项目需要中产生,伴随着Uni转载 2015-03-21 16:38:51 · 447 阅读 · 0 评论 -
do{...} while(0)
使用do{ } while(0);有什么好处??? http://bbs.youkuaiyun.com/topics/390361821?page=1整理论坛讨论当你执行一段代码到一半,想跳过剩下的一半的时候,如果你正处于do while循环中,则能用break达到这个目的。如:do{ 我执行 我执行。。 我再执行。。。 if (有什么条件满足了我) {转载 2017-03-26 23:13:55 · 347 阅读 · 0 评论