簡體   English   中英

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

其中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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM