C 中的 typedef、数组和指针
typedef, arrays and pointers in C
正在研究一个C语言写的代码
以下部分我不太清楚:
typedef uint8_t data_t[4][4];
typedef struct {
data_t *data;
...
} my_struct;
我不明白的是,data
的类型是什么?
另外,我想给这个变量赋值。
比如代码中有:
my_struct st;
st.data = (int8_t *)array
其中数组定义为 int8_t *array
。
我不明白这个分配是如何工作的,谁能解释清楚吗?
最后,是否可以为我的 data_t
变量赋值,而无需在我的结构中将其声明为指针?
The thing that I don't understand is, what is the type of data?
data
的类型是指向 two-dimensional 数组的指针。即uint8_t(*data)[4][4]
.
请参阅 C right-left rule 来解读 C 声明。
Plus, I want to assign values to this variable st.data = (int8_t *)array
.
在这种情况下 array
必须与 uint8_t[4][4]
数组具有相同的布局。由于数组在 C
中是连续的,因此 array
必须至少有 4 * 4 个 int8_t
.
类型的元素
您必须将 array
转换为 (uint8_t*)
的事实首先意味着 array
具有不同的类型,这可能会导致麻烦。
请注意,这只是一个指针赋值,不是 array
的 element-wise 副本。
is it possible to assign values to my data_t variable without declaring it as a pointer in my structure?
如果 data
不是指针,则可以,即声明为 data_t data;
。然后使用 memcpy
.
复制到其中
这个声明
typedef uint8_t data_t[4][4];
声明名称 data_t
作为类型 uint8_t [4][4]
的别名。
因此在结构定义中
typedef struct {
data_t *data;
...
} my_struct;
成员数据是 data_t *
类型的指针,与 uint8_t ( * )[4][4]
.
相同
所以它是一个指向 two-dimensional 类型对象指针数组的指针 uint8_t
数组没有赋值运算符。您必须将一个数组的元素复制到另一个数组中。
例如,如果您有另一个 one-dimensional 指针数组,例如
uint8_t *array[4];
你可以写
my_struct st;
st.data = malloc( sizeof( data_t ) );
memcpy( st.( *data )[0], array, 4 * sizeof( uint8_t * ) );
请注意,由于 data
是一个指针,您首先必须在要复制 uint8_t *
.
类型对象的位置分配内存
正在研究一个C语言写的代码
以下部分我不太清楚:
typedef uint8_t data_t[4][4];
typedef struct {
data_t *data;
...
} my_struct;
我不明白的是,data
的类型是什么?
另外,我想给这个变量赋值。 比如代码中有:
my_struct st;
st.data = (int8_t *)array
其中数组定义为 int8_t *array
。
我不明白这个分配是如何工作的,谁能解释清楚吗?
最后,是否可以为我的 data_t
变量赋值,而无需在我的结构中将其声明为指针?
The thing that I don't understand is, what is the type of data?
data
的类型是指向 two-dimensional 数组的指针。即uint8_t(*data)[4][4]
.
请参阅 C right-left rule 来解读 C 声明。
Plus, I want to assign values to this variable
st.data = (int8_t *)array
.
在这种情况下 array
必须与 uint8_t[4][4]
数组具有相同的布局。由于数组在 C
中是连续的,因此 array
必须至少有 4 * 4 个 int8_t
.
您必须将 array
转换为 (uint8_t*)
的事实首先意味着 array
具有不同的类型,这可能会导致麻烦。
请注意,这只是一个指针赋值,不是 array
的 element-wise 副本。
is it possible to assign values to my data_t variable without declaring it as a pointer in my structure?
如果 data
不是指针,则可以,即声明为 data_t data;
。然后使用 memcpy
.
这个声明
typedef uint8_t data_t[4][4];
声明名称 data_t
作为类型 uint8_t [4][4]
的别名。
因此在结构定义中
typedef struct {
data_t *data;
...
} my_struct;
成员数据是 data_t *
类型的指针,与 uint8_t ( * )[4][4]
.
所以它是一个指向 two-dimensional 类型对象指针数组的指针 uint8_t
数组没有赋值运算符。您必须将一个数组的元素复制到另一个数组中。
例如,如果您有另一个 one-dimensional 指针数组,例如
uint8_t *array[4];
你可以写
my_struct st;
st.data = malloc( sizeof( data_t ) );
memcpy( st.( *data )[0], array, 4 * sizeof( uint8_t * ) );
请注意,由于 data
是一个指针,您首先必须在要复制 uint8_t *
.