簡體   English   中英

在結構中初始化數組

[英]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.

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