我在下面的代码中显示了两个示例,它们给出相同的结果。我看到人们使用指针来做示例1。但是,为什么不使用示例2并直接使用a.x呢?有什么区别吗?
typedef struct
{
uint8_t x;
uint8_t y;
uint8_t z;
} xyz_t;
xyz_t a;
void func1(xyz_t* b)
{
printf("%d", b->x); //example 1
}
void func2()
{
printf("%d", a.x); //example 2
}
int main()
{
a.x = 10;
func1(&a); //example 1
func2(); //example 2
}
如果您的函数作为结构的参数而没有指针,则必须复制其数据以供该函数使用,这可能需要一些时间。此外,如果您要修改函数中的结构并查看其在函数范围之外的更改,则唯一的选择是通过指针发送它,因为您是在为函数提供要修改的变量在内存中的位置,而不是(本地)副本。通常最好按值发送变量,如果它们不大并且您不修改它们,因为它会使调用者更清楚函数对参数的操作。