C语言实现进度条功能

今天整理文件发现一个隐藏在硬盘角落里的一段神秘代码,运行之后发现这是一断让我打开眼界的程序。

#include <stdio.h>

#include <unistd.h>

int main()

{

int i;

for(i=0;i<=100;i+=10)

{

printf("Percent completed:%3d%%\r",i);

sleep(1);

fflush(stdout);

}

}

我们先在终端中运行该程序:

gcc -o func func.c

./func

程序会在同一行文件中打印 Percent comple......

细说指针

因为在工作中踩到了指针相关的坑,所以在这里记录下来问题产生的原因,以免再次遇到同样的错误。如果你对文章中的观点、内容存在不一样的看法,欢迎通过关于博主页面中的Email与我联系。

需求:

将代码提取成函数,代码如下:

mr_cfg_bsc_info_t *mir_list = NULL;

mir_list在主函数中是一级指针的形式,我提取函数时接口用了二级指针如下格式:

int32_t mirror_suspend_flag_abnormal_handle(mr_cfg_bsc_info_t *mir_info,lun_info_t *lun_info,uint32_t m......

柔性数组

#include <stdio.h>

#include <malloc.h>

typedef struct _soft_array

{

int len;

int array[];//int array[0];两种形式

}SoftArray;

int main()

{

int i = 0;

SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * 10);

sa->len = 10;

for(i=0; i<sa->len; i++)

{

sa->array[......

解读C的声明

No 1.

int (*func_p)(double)

解读:

func_p首先是一个函数指针.

func_p是一个指向参数为double,返回值为int的函数指针.

No 2.

int *hoge[10]

hoge是一个指向int的指针的数组(元素个数为10)

No 3.

double (*array_p)[3]

array_p是指向double(元素个数为三)的数组的指针

array_p = &array;这样赋值没有问题,因为类型相同。

如果array_p=array编译器就会发出警告,提示如下:

指向int的指针和指向in......

指针二三事

有同事今天问我一个指针的问题,没深究原因,下班回来静下心来分析分析,写下这篇文章,如有任何疑问请留言.

问题一

要实现一个函数,我们姑且理解成函数内部 malloc申请一块内存,然后针对这块内存做一系列操作,操作这部分姑且不用实现,我们要返回申请的这片内存的地址.

version 1

如果你拿到这个问题就立刻编写代码的话极有可能这么写:

/*

Name: 二级指针

Copyright: 52coder.net

Author: 52coder

Date: 03/06/17 17:24

Description: pointer

*/

#include <stdio.h>......

C经典程序集锦

集锦一:

#include <stdio.h>

int array[]={23,34,12,17,204,99,16};

#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))

int main()

{

int d=-1;

int x;

if(d <= TOTAL_ELEMENTS-2)

printf("Hello World.\n");

system("pause");

return 0;

}

TOTAL_ELEMENTS所定义的值是unsigned int 类型......

编程练习

描述

编写这样一个程序:

接收来自标准输入的n条指令,指令有如下三种:

a 后面跟一个整数,表示向集合插入一个数

d 后面跟一个整数,表示从集合删除一个数,集合中有多个指定数时,删除一个即可

p 从小到大打印出集合中的数

输入

每行输入一条指令,注意指令可能不符合规范,整数可能超出C语言长整形范围,可能带符号,但长度不会超过100

输出

当输入指令为p时,从小到大输出集合中的数,当指令不合法时,输出“Invalid Command”

输入样例

a -2

a 31415926535897932

c

a 1

a 4

a 4

d......

字节排序

在所有的介绍字节序的文章中都会提到字节序分为两类:Big-Endian和Little-Endian,引用标准的Big-Endian和Little-Endian的定义如下:

a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

c) 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。

/*

Name: 字节排序

Copyright: 52coder.net

Author: 52c......

内存对齐

忙里偷闲在看《征服C指针》这本书,虽然这本书写的比较基础可以是还是从中发现了一些有意思的地方,不过当看到内存对齐这块时却产生了如下疑问.

typedef struct
{
    int int1;
    double double1;
    char char1;
    double double2;
}Hoge;

那么问题来了,sizeof(Hoge)为多少?

作者交代了,在其环境中sizeof(int)为4,sizeof(double)为8,sizeof(char)为1.

C缺陷与陷阱

最近阅读C缺陷与陷阱,发现很多有意思的地方,在此作为记录.

No 1. 某些编译器允许嵌套注释。请写一个测试程序,要求:无论是对允许嵌套注释的编译器还是对不允许嵌套注释的编译器,改程序都能正常通过编译,但两种情况下程序执行的结果却不相同.

答案:

#include <stdio.h>

int main()

{

int i=/*/*/0*/**/1;

printf("%d\n",i);

}

这个解法主要利用了编译器作词法分析时的“贪心法”规则。如果编译器允许嵌套注释,则上式将被解释为:1

如果不允许嵌套注释,上面的表达式因此将被这样解释:0......