Typedef 与 C 中的数组

Joh*_*ith 3 c typedef

您好,我是 C 编程的新手。长时间使用 python 后,C 似乎变得无限困难(而且无限有趣)!

我无法理解的是使用typedef数组,特别是二维数组。

typedef double vector_t[10];
Run Code Online (Sandbox Code Playgroud)

据我了解,这有助于我们使用10 个元素vector_t初始化doubles数组。那么初始化会vector_t[10]初始化一个 Array[10][10]吗?

如果我初始化vector_t[5]呢?

typedef vector_t second_t[5];
Run Code Online (Sandbox Code Playgroud)

如果我使用会发生什么second_t?二维数组是数组[10][5]还是数组[5][10]

HTN*_*TNW 5

如果你使用

second_t v;
Run Code Online (Sandbox Code Playgroud)

这完全一样

vector_t v[5];
Run Code Online (Sandbox Code Playgroud)

这完全一样

double v[5][10]; /* NOT double[10][5] */
Run Code Online (Sandbox Code Playgroud)

当展开typedef,想象一下,你是什么代的后typedeftypedef的在其定义的名称:

typedef something t[size];
t x;
/* subst [t := x] into the typedef definition */
something x[size];

second_t v;
/* [second_t := v] in definition */
vector_t v[5];
/* [vector_t := v[5]] in definition */
double v[5][10];

typedef int (*unary_op)(int); /* pointers to functions int => int */
typedef int (*consumer)(unary_op); /* pointers to functions (int => int) => int */
consumer f;
/* [consumer := f] in definition */
int (*f)(unary_op);
/* [unary_op := ] (replace unary_op with "", because there's no name) in definition.
   We must respect parentheses */
int (*f)(int (*)(int));
// Something like int func(unary_op op) { return op(5); }
Run Code Online (Sandbox Code Playgroud)