MST

星途 面试题库

面试题:C语言函数参数传递中指针与结构体

定义一个结构体,包含几个不同类型的成员。编写一个函数,以结构体指针作为参数,在函数内部修改结构体成员的值。然后在主函数中调用这个函数,并展示修改后的结构体内容。同时说明这种参数传递方式相较于直接传递结构体的优势在哪里。
47.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

// 定义结构体
typedef struct {
    int id;
    float score;
    char name[20];
} Student;

// 定义修改结构体成员值的函数
void modifyStudent(Student *stu) {
    stu->id = 2;
    stu->score = 85.5;
    snprintf(stu->name, sizeof(stu->name), "Alice");
}

int main() {
    Student s1 = {1, 78.0, "Bob"};
    printf("Before modification:\n");
    printf("ID: %d, Score: %.2f, Name: %s\n", s1.id, s1.score, s1.name);

    modifyStudent(&s1);

    printf("\nAfter modification:\n");
    printf("ID: %d, Score: %.2f, Name: %s\n", s1.id, s1.score, s1.name);

    return 0;
}

这种参数传递方式相较于直接传递结构体的优势:

  1. 效率更高:当结构体较大时,传递结构体指针只是传递一个指针(通常为4字节或8字节,取决于系统架构),而传递结构体本身需要复制整个结构体的内容,开销较大。例如一个包含大量数据成员的结构体,传递指针能显著减少内存复制开销,提升程序性能。
  2. 可以直接修改原结构体:传递结构体指针,函数内部对指针指向的结构体进行修改,能直接反映到调用处的原结构体上。而传递结构体副本的话,函数内对副本的修改不会影响原结构体。