为什么使用结构指针而不直接使用结构(C)

问题描述 投票:0回答:1

我在下面的代码中显示了两个示例,它们给出相同的结果。我看到人们使用指针来做示例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
}
c pointers
1个回答
1
投票

如果您的函数作为结构的参数而没有指针,则必须复制其数据以供该函数使用,这可能需要一些时间。此外,如果您要修改函数中的结构并查看其在函数范围之外的更改,则唯一的选择是通过指针发送它,因为您是在为函数提供要修改的变量在内存中的位置,而不是(本地)副本。通常最好按值发送变量,如果它们不大并且您不修改它们,因为它会使调用者更清楚函数对参数的操作。

© www.soinside.com 2019 - 2024. All rights reserved.