[英]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
其中array定義為int8_t *array
。
我不了解此分配的工作原理,有人可以清楚地解釋嗎?
最后,是否可以將值data_t
變量而無需在結構中將其聲明為指針?
我不明白的是,數據類型是什么?
data
的類型是指向二維數組的指針。 那就是uint8_t(*data)[4][4]
。
有關解密C聲明,請參見C左右規則 。
另外,我想為該變量
st.data = (int8_t *)array
。
在這種情況下, array
必須與uint8_t[4][4]
數組具有相同的布局。 由於數組在C
是連續的,因此該array
必須至少具有4 * 4個int8_t
類型的int8_t
。
首先必須使用(uint8_t*)
array
的事實意味着該array
具有不同的類型,這可能會引起麻煩。
請注意,這只是一個指針分配,而不是array
逐元素副本。
是否可以將值賦給data_t變量而無需在結構中將其聲明為指針?
如果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]
。
因此,它是指向二維數組的指針,該數組指向`uint8_t類型的對象
數組沒有賦值運算符。 您必須將一個數組的元素復制到另一個數組中。
例如,如果您還有另一個一維指針數組,例如
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 *
類型的對象的地方分配內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.