从函数返回结构指针的最佳方法

时间:2016-10-27 21:19:14

标签: c pointers struct

我需要就此事提出一些意见。我需要知道解决这个问题的最佳方法是什么。

如果我需要返回指向某个结构的指针,我可以返回一个uint8_t类型的指针,该指针指向该结构的起始地址,还是应该是指向结构的指针?

例如假设我们有以下结构:

typedef struct
{
   uint8_t type;
   uint8_t num;
   uint16_t Id;
} myStruct_t;

myStruct_t x[10];

我们有一个函数应该根据类型返回指向x数组的某个元素的指针。现在应该将函数声明如下:

int function_x( myStruct_t * ptr )
{
  ...
  //ptr = &x[0];
  memcpy( ptr, &x[0], sizeof(..) )
  return 0;
}

或者我可以将其声明为:

int function_x( uint8_t * ptr )
{
  ...
  ptr = (uint8_t *)&x[0];
  return 0;
}

在后一种情况下,我们可以通过执行以下操作来重新调整函数:

....
myStruct_t resp;
int r;
r = function_x( (uint8_t *)&resp );
printf("%d\n", resp.type );
...

这两个案例都经过测试并证明有效,但这里的问题是哪种方法被认为是更可接受的方法,而且更令人不悦?

0 个答案:

没有答案