C中带有数组的Typedef
你好,我是C编程新手。在使用python很长一段时间之后,C似乎变得非常困难(而且非常有趣) 我无法理解的是使用C中带有数组的Typedef,c,typedef,C,Typedef,你好,我是C编程新手。在使用python很长一段时间之后,C似乎变得非常困难(而且非常有趣) 我无法理解的是使用typedef数组,尤其是二维数组 typedef double vector_t[10]; 据我所知,这有助于我们使用vector\u t初始化包含10个元素的doubles数组。初始化向量[10]是否会初始化[10][10]数组 如果我初始化向量[5],又会怎么样 typedef vector_t second_t[5]; 如果我使用second\t,会发生什么?二维数组是[1
typedef
数组,尤其是二维数组
typedef double vector_t[10];
据我所知,这有助于我们使用vector\u t
初始化包含10个元素的double
s数组。初始化向量[10]
是否会初始化[10][10]
数组
如果我初始化向量[5],又会怎么样
typedef vector_t second_t[5];
如果我使用second\t
,会发生什么?二维数组是[10][5]
数组还是[5][10]
数组
second_t v;
这和
vector_t v[5];
double v[5][10]; /* NOT double[10][5] */
这和
vector_t v[5];
double v[5][10]; /* NOT double[10][5] */
当您展开一个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); }
据我所知,这有助于我们使用vector_t初始化一个包含10个元素的双精度数组
那不太正确。确切地说,这个typedef定义了一个自定义类型,它允许一个人声明一个数组,比如说,vector\t example[N]
哪个真正的维度将是N+1
(因为vector\u t
已经假设单个元素本身就是一维数组)。说initialise意味着用一些数据填充内存。在这种特殊情况下,您可以说memset(my_-vec,0,sizeof(my_-vec))
将阵列归零。如果你有一个更简单的变量,比如,inta
,然后您可以使用,比如,a=1来初始化它代码>
如果您在另一个示例[10][10]
中声明了vector,\n这实际上将为您提供一个三维数组-10 x 10 x 10
如果我使用second\t会发生什么?二维数组是数组[10][5]还是数组[5][10]
因此,正如您在我的文章开头所理解的,在后一种情况下,无论是声明第二个数组[10][5]
还是第二个数组[5][10]
都不会给出2D数组。
实际上,这将是4维数组,因为second\t
将单个元素定义为已经是二维数组
出于教育目的,我建议您从以下内容开始
#include <stdio.h>
#include <stdint.h>
typedef uint8_t vector_t[10];
#包括
#包括
typedef uint8_t vector_t[10];
为了能够构造更复杂的类型,然后声明数组(例如,变量将被称为array
),最后执行类似于printf的操作(“大小为%lu字节\n”,sizeof(数组))代码>以查看以字节为单位的总大小。然后,很容易看到考虑的总大小是多少,最基本的类型是uint8\u t
(1字节)