这两种结构用法之间的区别

EUS*_*EUS 1 c arrays struct

在函数中使用结构时,我提供了两种将其作为参数传递的方法,但我不知道哪种方法更好。

#include <stdio.h>

typedef struct Person{
    int age;
    int id;
} person;

static void foo(person *p1);

int main()
{
    person per1;
    person per2[1];

    foo(&per1); /*1*/
    foo(per2); /*2*/

    printf("per1. Age: %i; id: %i\n",per1.age,per1.id);
    printf("per2. Age: %i; id: %i\n",per2->age,per2->id);

    return 0;
}
static void foo(person *p1)
{
    p1->age=10;
    p1->id=123;
}
Run Code Online (Sandbox Code Playgroud)

用例仅适用于struct的一个实例。如果只需要一个,就性能和使用感而言,传递通用结构声明的地址,或传递将衰减到指针的结构的单一数组,哪个更好?

Bre*_*ent 8

任何现代编译器在每种情况下都会产生相同的机器代码,因此无需担心性能。(请参阅Godbolt)。

由于没有性能差异,请以最能表达您意图的方式进行。您的意图是拥有一个对象,并将该对象的地址传递给函数。因此,只需执行此操作(即您的第一选择)。无缘无故地创建一个1元素的数组只会使事情变得混乱。