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