您的位置:首页 > 编程语言 > C语言/C++

C语言特殊语法(五)另类数组

2014-06-21 00:00 218 查看
平常看到的C语言代码中,数组的写法几乎千变一律,以至于我们以为C语言的数组就只能那么写。在C99标准中,其实说明了数组的另外一种用法,代码如下所示:

const char hello[] = {
[0] = 'h', [1] = 'e', [2] = 'l', [3] = 'l', [4] = 'o'
};

当然,还可以使用枚举值:

enum Value
{
V_0,
V_1,
V_2,
V_3,
V_4
};

const char hello[] = {
[V_0] = 'h', [V_1] = 'e', [V_2] = 'l', [V_3] = 'l', [V_4] = 'o'
};

以上这样的代码或许还不是太有意思,那么看看结构体的写法吧:

struct Type
{
int v;
};

struct Type type[] = {[0].v = 1, [1].v = 2, [2].v = 3};

哈,这样的代码是不是很有趣?用在合适的场合还是非常有用的!

代码示例:

#include <stdio.h>

typedef void (* CmdFunc)();
enum Cmd
{
CMD_HELP = 'h',
CMD_VERSION = 'v',
};
void help_for_help();
void help_for_version();

CmdFunc CmdList[] = {
[CMD_HELP] = help_for_help,
[CMD_VERSION] = help_for_version
};

void help_for_help()
{
printf("Usage: test [options] ...\n
[-h] show help information\n
[-v] show version information");
}

void help_for_version()
{
printf("Version 1.0\n");
}

int main(int argc, char *argv[])
{
if (argc > 1 && (*argv[1] == '-'))
{
if (*(++argv[1]) == CMD_HELP || *(argv[1]) == CMD_VERSION)
{
CmdList[*argv[1]]();
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: