繁体   English   中英

如何将struct成员作为函数中的指针传递

[英]How to pass a struct member as a pointer in a function

首先,我想说在发布这个问题之前,我已经在这个论坛上详尽地搜索了答案,但我没有找到任何答案。

好吧,问题是我有一个结构是另一个(主要)结构的成员。 我写了一个函数来清除第一个结构(它需要一个指向struct的指针)。 我想使用该函数来清除主结构中的结构,但我不确切知道哪种方法是正确的。

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

我有一个结构,定义为:

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) :是指向struct sensors_struct的成员st_circular_buffer的指针,它恰好是struct 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));
    }
}

在Nicolas中,例如clearCircularBuffer(&(sensors_struct-> st_circular_buffer));

我们可以直接使用

clearCircularBuffer(sensors_struct-> st_circular_buffer);

- >优先于&

1)首先,您没有正确定义结构。 定义结构如下

 typedef struct one
 {
   unsigned char next;
   unsigned char first;
   unsigned long data[11]; 
 }struct_circ_buff;

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

2)你问

I would like to write a function that would clean this struct, using the 'clearCircularBuffer' function written above. How could I do that? 你可以这样做

void clear_sensors_struc (volatile struct_sens *sensors_struct)
{

  int i;

  sensors_struct->sensorFlag=0;
  sensors_struct->sensorType=0;
  sensors_struct->st_circular_buffer.next=0;
  sensors_struct->st_circular_buffer.first=0;

  for(i=0;i<TCP_RX_BUFFER+1;i++)
  {
     sensors_struct->st_circular_buffer.data[i]=0;
  }    

} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM