您好,我是 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]?
如果你使用
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,想象一下,你是什么代的后typedef的typedef的在其定义的名称:
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)