C语言 将a中的数组初始化为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是struct变量而不是指针,可以这样做:

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,因为我实际上减去了每个带有值的元素。现在我只是试图将其转换为struct

Interruptx_Handler.c

if( (*(Softstart_1ms_Ptr)) == (*(Softstart_1ms_Ptr_Last_elem)) )                // checking for last element , debug point.
{
__NOP();
}

相关内容

  • 没有找到相关文章

最新更新