将以下两种不同的传递变量方法区分为函数

时间:2015-05-19 16:06:34

标签: c function

我有以下结构和下面列出的两种方法。哪种方法更好,为什么?

typedef struct _MY_ST_
{
  int a;
  int b;
} MY_ST;

方法1:

int func1(MY_ST my_st)
{
  int temp;
  temp = my_st.a + my_st.b;
  return temp;
}

方法2:

int func2(const MY_ST *const my_st)
{
  int temp;
  temp = my_st->a + my_st->b;
  return temp;
}

2 个答案:

答案 0 :(得分:1)

如此小的结构(2个整数),你不会看到差异。

通常,通常将指针传递给结构是有意义的,因为它避免了不必要的复制。但是在这种特殊情况下,我会说,只要选择你感觉更舒服并且对你有意义的话。

此外,您不需要func2()中的参数为const MY_ST *const my_stconst MY_ST *my_str就足够了,因为指针是通过副本传递的,所以被调用者无法修改调用者的指针值。

答案 1 :(得分:0)

我想说第二种方法更好,因为你只将一个指针传递给你的结构所在的内存。在第一种方法中,您传递who结构,计算机将在内存中复制函数中的结构 - 将构建结构的副本。 (但运行优化的编译器可能会使两个方法等效)