解读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的指针和指向int的数组(元素个数3)的指针是完全不同的数据类型.

No 4.

int *func_table[10])(int a)

指向返回int的函数(参数类型是int)的指针的数组(元素个数为10)

存储学习

HWManager -t -oppwrctl -pwron 对端开机

HWManager -t -oppwrctl -foff 对端关机

HWManager -t -host -rst 本端开机

HWManager -t -host -foff 本端关机

问题单提交规范:

【问题描述】

【操作步骤】

【预期结果】

【实际结果】

【问题定位】

【问题解决】

【问题验证】 按照提单步骤验证,验证通过,请审核!!!

【SVN】

......

指针二三事

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

问题一

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

version 1

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

/*

Name: 二级指针

Copyright: 52coder.net

Author: 52coder

Date: 03/06/17 17:24

Description: pointer

*/

#include <stdio.......

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: 52......

内存对齐

忙里偷闲在看《征服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);

return 0;

}

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

如果不允许嵌套注释,上面的......

C语言中宏的用法

总结一下C语言中宏的一些特殊用法和几个容易出错的地方。由于本文主要参考GCC文档,某些细节在别的编译器可能有细微差别。

宏基础

宏仅仅是在C预处理阶段的一种文本替换工具,编译完之后对二进制代码不可见。基本用法如下:

标示符别名

#define BUFFER_SIZE 1024

预处理阶段,foo = (char ) malloc (BUFFER_SIZE);会被替换成foo = (char ) malloc (1024);

宏体换行需要在行末加反斜杠\

#define NUMBERS 1, \

2, \

3

预处理阶段int x[] = { N......

关于 Bitcron

Bitcron 的由来

每一个人都在创造着更多的电子数据,一篇日志、日常拍摄的照片、一个演讲稿、工作中的 Wiki、一次线下活动的页面……

如何让这些电子数据更好地、人性地呈现呢?

所以,我们创造了 Bitcron。

这是两个词的合意: Bit,信息技术的基本单位;Cron则是计划任务,代表每天24小时存活于互联网(Bit流)中。

Bitcron 由 FarBox 进化而来,在选定 Bitcron 之前,我们也考虑使用比如 SitesCloud 此类比较明确含义的名字,但并不太酷,终未入选。

确定名字后,身边的朋友先联想到的是“比特币” (BitCoin)。

跟比特......