序号 | 作用 | comment |
1 | 提高效率 | 传递大结构体时,如果将整个结构体的数据复制到函数的栈帧中比较耗时耗内存,而传递指向结构体的指针,只需要复制4或8字节的指针。 |
2 | 可直接在函数中修改结构体内容 | 传值只能修改结构体复制的版本(副本),不能影响原始结构体。 |
3 | 可处理动态分配的结构体 | 如果结构体在堆上动态分配(例如使用 `malloc`),直接传递指针可以方便地访问和修改。 |
举个例子
// 假设你有一个大的结构体 `BigStruct`:
typedef struct {
int data[1000];
} BigStruct;
// 如果你有一个函数需要处理这种结构体,你可以通过指针传递:
void processStruct(BigStruct* s) {
// 直接通过指针访问和修改结构体
s->data[0] = 42;
}
// 而不是:
void processStruct(BigStruct s) {
// 需要复制整个结构体到栈上
s.data[0] = 42;
}
在 C 语言中,使用指针来引用结构体是一种常见的做法,主要是为了提高函数调用的效率、方便修改结构体内容以及处理动态分配的内存。虽然可以直接传递结构体本身,但在实际应用中,指针提供了更好的性能和灵活性。