通过指针传递值到函数.我们应该在函数内部创建变量的副本吗?

user3483899 0 c pointers safety-critical

我们有两个简单的功能.

#include <stdio.h>

 /* first approach */
int power1(int *ptr)
{
     return *ptr * *ptr;    
}

/* second approach */
int power2(int *ptr)
{
    int tmp = *ptr;
    return tmp*tmp;    
}

int main()
{
    int val = 5;

    printf("%d\n", power1(&val));
    printf("%d\n", power2(&val));

    return 0;
}

哪一个更好?power1有点快,但我听说power2更安全.我不记得为什么?据我所知,有一种情况是power1(第一种方法)存在瓶颈.你能解释一下吗?安全关键系统是否使用第二种方法?

Jabberwocky.. 5

没有什么是好的.你要这个:

#include <stdio.h>

/* second approach */
int power(int operand)
{
    return operand*operand;    
}

int main(void)
{
    int val = 5;    
    printf("%d\n", power(val));
}

现在关于你的两种方法:

power2绝不比"更安全" power1.

BTW:

一个正确的声明方式mainint main(void),并且return 0;在结尾处main没有必要,如果main不包含一个return语句,则return 0;在结尾处有一个隐含的main.

  • @ user3483899那里有很多不好的采访者. (2认同)