gpt4 book ai didi

c - 如何将结构成员作为函数中的指针传递?

转载 作者:太空狗 更新时间:2023-10-29 17:23:46 25 4
gpt4 key购买 nike

问题是我有一个结构是另一个(主要)结构的成员。我写了一个函数来清除第一个结构(它需要一个指向结构的指针)。

我想使用那个函数来清除主要结构中的结构,但我不知道哪种方法才是正确的。

为了更好地解释它,这里是一些代码:

我有一个结构,定义为:

typedef struct
{
unsigned char next;
unsigned char first;
unsigned long data[TCP_RX_BUFFER+1];
}struct_circ_buff;

以及清除它的函数:

void clearCircularBuffer(volatile struct_circ_buff *circular_buffer)
{
int i=0;

for(i=0;i<TCP_RX_BUFFER+1;i++)
circular_buffer->data[i]=0;

circular_buffer->first=0;
circular_buffer->next=0;
}

然后,我有另一个包含 struct_circ_buff 的结构:

typedef struct 
{
volatile unsigned char sensorType;
volatile uint16_t sensorFlag;
volatile struct_circ_buff st_circular_buffer;
}struct_sens;

并且我想使用上面编写的 clearCircularBuffer 函数编写一个函数来清理此结构。我怎么能那样做?

void clear_sensors_struc (volatile struct_sens *sensors_struct)
{

sensors_struct->sensorFlag=0;
sensors_struct->tipoSensor=0;

//NOW, HOW CAN I USE clearCircularBuffer to clean sensors_struct->
//st_circular_buffer??

//this way compiles fine, but i don´t think it´s correct
clearCircularBuffer(&(sensors_struct->st_circular_buffer));

//this way wouldn´t even compile
clearCircularBuffer(sensors_struct->st_circular_buffer));
}

最后,我有一个变量声明为:

struct_sens struct_sensores[MAX_NUMBER_OF_SENSORS];

我想编写一个函数来清理该结构数组...

那么我如何使用 clear_sensors_struc 函数来做到这一点?

void clear_sensors_struc_array(struct_sens *sensors_struct)
{
struct_sens aux_str[MAX_NUMBER_OF_SENSORS];
int i=0;

for(i=0;i<MAX_NUMBER_OF_SENSORS;i++)
{
clear_sensors_struc(&aux_str[i]);
*(sensors_struct+i)=aux_str[i];
}
}

有没有办法在不定义内部 struct_sens aux_str 的情况下做到这一点?

最佳答案

在函数 clear_sensors_struc 中,这样做确实是正确的:

//this way compiles fine, but i don´t think it´s correct
clearCircularBuffer(&(sensors_struct->st_circular_buffer));

这是对的,因为(在函数 clear_sensors_struc 内部):

  • sensors_struct:是一个指向结构的指针。
  • sensors_struct->st_circular_buffer:取消引用 sensors_struct(使用 ->)并允许您访问其成员st_circular_buffer
  • &(sensors_struct->st_circular_buffer):是指向结构sensors_struct的成员st_circular_buffer的指针恰好是一个结构 struct_circ_buff

由于函数 clearCircularBuffer 需要一个指针,因此它会编译并正常工作。

关于清理结构体数组的函数,这个怎么样?:

void clear_sensors_struc_array(struct_sens *sensors_struct)
{
int i=0;

for(i=0;i<MAX_NUMBER_OF_SENSORS;i++)
{
clear_sensors_struc((sensors_struct+i));
}
}

关于c - 如何将结构成员作为函数中的指针传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17928123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com