[英]Initializing array in a to struct
我怎樣才能一次初始化一個數組而不是一個一個地初始化,這很乏味,因為我需要用 pwm 占空比值初始化許多數組?
typedef struct
{
uint16_t *pointer;
uint16_t WELDx_Table[19];
} WELDx;
WELDx *weldx ;
int main(void )
{
weldx->pointer= &weldx->WELDx_Table[0];
weldx->pointer[0]=9;
weldx->pointer[1]=1;
"" "" "" ""
"" "" "" ""
weldx->pointer[17]=9;
weldx->pointer[18]='F';
}
謝謝 ,
您不能初始化任何動態分配的內存。 您只能在變量定義期間對其進行初始化。 如果weld
是一個結構變量而不是一個指針,你可以這樣做:
WELDx weldx =
{
.WELDx_Table = {9, 1, 8, 2, ..., 9, 'F'},
.pointer = &weldx.Weldx_Table;
};
此語法僅可用於初始化,但不能用於之后為變量賦值。
您可以做的是創建一個復合文字並將其復制到位:
WELDx *weldx = malloc(sizeof (*weldx));
memcpy(weldx->WELDx_Table, &(uint16_t[19]){9, 1, 8, 2, ..., 9, 'F'}, sizeof(uint16_t[19]));
weldx->pointer = weldx->WELDx_Table;
我開始寫一個答案,但很快意識到這段代碼沒有多大意義。 所以這里是一個代碼審查:
uint16_t *pointer;
完全沒用,因為數組WELDx_Table
會衰減為一個指針,該指針具有您在表達式中使用時想要的地址。WELDx *weldx;
需要在某處初始化,以指向分配的數據。 目前尚不清楚您為什么將其聲明為開頭的指針。uint16_t WELDx_Table[19];
. 該數組應聲明為const
,除非您計划在運行時更改它。清理完上述內容后,您可以擔心初始化。
謝謝@Lundin,@Gerhardh 的回答。 首先,我實際上並沒有定義為什么我首先使用結構,我會詳細說明,但請注意我的 c,因為我是新手,並且肯定會嘗試了解更多。
Weld_Softstart.h
/*Sofstart variable*/
extern volatile uint16_t Softstart_1ms_Table[PULSE_NO];
extern volatile uint16_t *Softstart_1ms_Ptr_Last_elem;
extern volatile uint16_t *Softstart_1ms_Ptr;
extern volatile bool Welding_Proc_Init;
extern volatile u16 uS_cnt ;
/*MainPulse variable*/
extern volatile uint16_t MainPules_9ms_Table[];
我已經在我的Weld_Softstart.c文件中聲明了這些,我想使用結構讓它看起來更干凈,我使用 volatile 因為所有這些變量都在中斷服務例程中使用,也聲明了 extern 因為我在多個中使用它們.c 文件,我需要相同的實例。然后在一個函數中,我不斷增加 Softstart_1ms_Ptr 直到它達到 Softstart_1ms_Ptr_Last_elem ,這是我的終止字符之前的一個元素,這就是使用指針的原因。最后我沒有將我的數組聲明為 const 因為我實際上是用一個值減去每個元素。 .現在我只是想把它翻譯成一個結構
中斷處理程序.c
if( (*(Softstart_1ms_Ptr)) == (*(Softstart_1ms_Ptr_Last_elem)) ) // checking for last element , debug point.
{
__NOP();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.