![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
文章平均质量分 67
IT_Linux
Linux world
展开
-
内嵌类 局部类 抽象类
内嵌类内嵌类有两种类型:内联(inner)类和静态内嵌(static nested)类。 主要的区别: 一、内联类可以访问定义在外围类(enclosing class)中的实例变量。静态内嵌类不可以。 二、内联类是完全封装在外围类中的。而静态内嵌类可以被外部代码使用,只要不是private的。如静态内嵌类Entry用来遍历Map对象中的key-value对。在Map之外的代原创 2012-11-09 20:41:00 · 810 阅读 · 0 评论 -
整型溢出问题
整型溢出问题是常见问题,通过下面的例子去品味整型溢出的“乐趣”吧。#include /*对于unsigned整型溢出,C的规范是有定义的——“溢出后的数会以2^(8*sizeof(type))作模运算”,也就是说,如果一个gned char(1字符,8bits)溢出了,会把溢出的值与256求模。对于signed整型的溢出,C的规范定义是“undefined behavior”,也就是说,原创 2014-04-24 10:29:25 · 1571 阅读 · 0 评论 -
大文件操作(eg:4G)
大文件指的是超过4G的文件。在32bit机器上操作这样的大文件时,会出现问题。具体的,下面会具体讲解。大文件问题首先32位机器用fopen/fclose打开大文件没有问题,顺序读写操作while(!feof(fp)){ fread / fgets / fscanf }或while(1){ fwrite / fputs / fprintf} 也没有问题。由于32位机器下long是32位,故f原创 2013-12-09 21:54:06 · 5213 阅读 · 0 评论 -
十进制转化为七进制
迭代法:void ten_to_seven(int num){ int tmp,res=0,n=1; do { tmp = num % 7; num /= 7; res += tmp * n; n *= 10; }while (num > 0); printf("%d\n",原创 2012-11-09 20:21:15 · 7926 阅读 · 0 评论 -
C语言谜题解析
本文汇总了一些容易犯错、不易察觉的C编程错误。有时候,你会遇到莫名其妙的错误而不知所措,本文中的一些例子可以给你提供经验,防患于未然。宏#include #define f(a,b) a##b#define g(a) #a#define h(a) g(a)int main(){ printf("%s\n", h(f(1,2))); printf("%s\n", g(f(1,2))); return 0;}说原创 2014-04-16 19:39:30 · 1437 阅读 · 0 评论 -
fork与行缓冲
题目:请问下面的程序一共输出多少个“-”? 如果你对fork()的机制比较熟悉的话,这个题并不难,输出应该是6个“-”,但是,实际上这个程序会很tricky地输出8个“-”。要讲清这个题,我们首先需要知道fork()系统调用的特性,fork()系统调用是Unix下以自身进程创建子进程的系统调用转载 2014-04-08 17:09:18 · 1111 阅读 · 0 评论 -
结构体中的指针与零长度数组
0长度的数组在ISO C和C++的规格说明书中是不允许的,但是由于gcc 预先支持C99的这种玩法,所以,“零长度数组”在gcc环境下是合法的。先看下面两个例子。pzeroLengthArray.c#include struct str{ int len; char *s;};struct foo{ struct str *a;};int main(){原创 2014-04-30 17:30:21 · 3501 阅读 · 0 评论 -
关键字统计
给定关键字,从终端输入一行以单词组成的字符串,统计各关键字出现的次数。下面的程序在Dev-C环境下运行通过:#include #include #include char key[5][9]={ "else","float","goto","if","register",}; int main(){ int i,j; c原创 2012-11-09 20:50:52 · 885 阅读 · 0 评论 -
变长数组-C99新特性
C99允许我们在任何地方定义变量,并且支持不定长数组的定义,即,我们可以使用变量来定义我们的数组。这就使得我们可以在程序运行过程中根据实际需要来定义数组长度。摘自http://hi.baidu.com/zotin/item/a7149aad7003d99f14107366的一个例子,进行了少许的修改,源文件名字为varray.c:#include #include #define pr原创 2013-12-11 11:51:04 · 4796 阅读 · 0 评论 -
随机函数(stdlib)
The following code defines a pair of functions which could be incorporated into applications wishing to ensure that the same sequence of numbers is generated across different machines:下面的代码,在种子值相同的情翻译 2012-12-08 00:07:10 · 817 阅读 · 0 评论 -
等号赋值与memcpy的效率问题
偶尔看到一个说法,说,小内存的拷贝,使用等号直接赋值比memcpy快得多。结合自己搜集到的资料,整理成此文。事实:strcpy等函数的逐字节拷贝,memcpy是按照机器字长逐字进行拷贝的,一个字等于4(32位机)或8(64位机)个字节。CPU存取一个字节和存取一个字一样,都是在一条指令、一个内存周期内完成的。显然,按字拷贝效率更高。先给出一个程序:#include #define T原创 2013-12-05 16:00:42 · 11823 阅读 · 0 评论 -
不使用中间变量交换两个数
方法一:#define swap(x,y) {x = x ^ y; y = x ^ y; x = x ^ y;}方法二:#define swap(x,y) {x = x + y; x = x - y; x = x - y;}原创 2012-11-09 16:59:43 · 598 阅读 · 0 评论 -
malloc realloc calloc 的区别和联系
ANSI C说明了三个用于存储空间动态分配的函数(1) malloc 分配指定字节数的存储区。此存储区中的初始值不确定(2) calloc 为指定长度的对象,分配能容纳其指定个数的存储空间。该空间中的每一位(bit)都初始化为0(3) realloc 更改以前分配区的长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定四原创 2012-11-20 21:46:50 · 927 阅读 · 0 评论 -
二维数组的动态分配和释放
PDF版本下载 (1)已知第二维Code-1char (*a)[N];//指向数组的指针a = (char (*)[N])malloc(sizeof(char *) * m);printf("%d\n", sizeof(a));//4,指针printf("%d\n", sizeof(a[0]));//N,一维数组free(a);(2)已知第一维Code-转载 2012-11-09 20:31:22 · 912 阅读 · 0 评论 -
C语言实现全排列
全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个;为了用递归的方式实现全排列,我们将整组数中的所有的数分别与第一个数交换,然后总是处理后n-1个数的全排列。 #include int count = 0;void swap(int *a, int *b){ int tmp = 0; tmp = *a; *a = *b;原创 2014-04-10 18:44:57 · 1519 阅读 · 0 评论