繁体   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