typedef数组,长度恒定

a-z*_*a-z 0 c c++ typedef

这是做什么的以及如何做?

typedef int map_t [1<<MAX];
Run Code Online (Sandbox Code Playgroud)

那条线做什么?

Oli*_*rth 8

假设MAX在编译时是一个常量,那么这段代码:

typedef int map_t [1<<MAX];
map_t x;
Run Code Online (Sandbox Code Playgroud)

与此代码相同:

int x[1 << MAX];
Run Code Online (Sandbox Code Playgroud)

  • @Dimme` <<`是"左移"运算符.它将第一个操作数中的所有位移位到左边等于第二个操作数的位数.`a << b`大致相当于`a*pow(2,b)`. (2认同)

Esa*_*ija 6

我们假设MAX定义为8:

typedef int map_t[1<<MAX];
Run Code Online (Sandbox Code Playgroud)

和...一样

typedef int map_t[256];
Run Code Online (Sandbox Code Playgroud)

因为1 << 8= 256.这意味着数字1的移位位向左8次,如下所示:

1是0000 0001二进制

一班后:

0000 0010,小数点后2

8班后:

1 0000 0000,十进制256

所以这里没有bitmasking,这只是简单的说法

typedef int map_t[pow(2,MAX)];
Run Code Online (Sandbox Code Playgroud)

我还没有完成C,但上面应该编译,对吧?

编辑:以上不编译,但如果我们要动态分配它应该工作.