Typedef与数组在C中
你好,我是C编程新手。在长时间使用python之后,C似乎变得更加困难(而且无限多的乐趣)!Typedef与数组在C中
我不能包裹我的头是使用typedef
与阵列,特别是2D阵列。
typedef double vector_t[10];
据我了解这可以帮助我们用vector_t
有10个元素初始化的double
秒的阵列。那么初始化vector_t[10]
会初始化一个数组[10][10]
?
另外如果我初始化vector_t[5]
?
typedef vector_t second_t[5];
如果我使用second_t
会发生什么?请问2d阵列是0的数组还是[5][10]
的数组?
如果使用
second_t v;
这是完全一样的
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_t
已经假定单个元素本身就是一维数组)。说初始化意味着你用一些数据填充内存。在这种情况下,你可以说memset(my_vec, 0, sizeof(my_vec));
来清零数组。如果你有一个更简单的变量,比如说,int a;
,那么你可以用初始化它与a = 1;
。
如果声明vector_t another_example[10][10]
,这实际上给你一个3维数组 - 10×10×10
如果我使用second_t会发生什么? 2d阵列是Array [10] [5]还是Array [5] [10]?
所以,你可以从我的文章的开头了解,在后一种情况下,既没有宣布second_t Array[10][5]
也不second_t Array[5][10]
会给出一个二维数组。 实际上,这将是维数组,因为second_t
将单个元素定义为已经是二维数组。
教育目的,我建议你干脆的东西,以便能够构建更复杂的类型,然后声明数组(比如,变量将被称为array
),最后开始喜欢
#include <stdio.h>
#include <stdint.h>
typedef uint8_t vector_t[10];
,请执行类似printf("The size is %lu bytes\n", sizeof(array));
的操作,以查看以字节为单位的总大小。然后很容易看到总大小考虑到基本类型是uint8_t
(1字节)。