2015-05-19 24 views
0

我有下面列出的结构和两种方法。哪种方法更好,为什么?将以下两种不同的传递变量方法区分为函数

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; 
} 
+0

您在问题中的问题标题和问题是不同的问题。两者都不是“更好”; *任何*的任何优点或缺点完全取决于预期的用途,这是没有指定的。所以澄清你的问题:更好的*为什么*完全?有一个明显的*差异*:一个通过值传递其他通过'const'地址(也是一个值,只是一种不同的类型)。一个允许本地修改结构数据,另一个不允许。 On没有任何机制可以直接引用*调用者的*数据,另一种是等等。 – WhozCraig

回答

0

我要说的第二个方法是更好,因为你只有一个指针传递到您的结构保持在内存中。在第一种方法中,你传递了谁的结构和计算机将在内存中复制函数中的结构 - 结构的副本将被创建。 (但编译器运行优化可能会使这两种方法等价)

1

有了这样一个小的结构(2个整数),你就不会看到差异。

一般来说,将指针传递给结构通常是有意义的,因为它避免了不必要的复制。但在这个特定的情况下,我想说的是随便你去做什么,并且对你有意义。

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

相关问题