MST

星途 面试题库

面试题:C语言结构体作为函数参数的传值方式

在C语言中,定义一个包含整型成员和字符型成员的结构体。编写一个函数,以该结构体作为参数,采用传值方式传递,在函数内部修改结构体成员的值,然后在主函数中调用该函数并输出结构体成员的值,分析输出结果与预期是否一致,并解释原因。
42.2万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

// 定义结构体
typedef struct {
    int num;
    char ch;
} MyStruct;

// 函数声明
void modifyStruct(MyStruct s);

int main() {
    MyStruct s = {10, 'A'};
    printf("Before modification: num = %d, ch = %c\n", s.num, s.ch);
    modifyStruct(s);
    printf("After modification: num = %d, ch = %c\n", s.num, s.ch);
    return 0;
}

// 函数定义,采用传值方式传递结构体
void modifyStruct(MyStruct s) {
    s.num = 20;
    s.ch = 'B';
}

输出结果分析

  • 输出结果
Before modification: num = 10, ch = A
After modification: num = 10, ch = A
  • 与预期不一致。预期是修改后num为20,chB,但实际输出还是原来的值。
  • 原因:在modifyStruct函数中,采用传值方式传递结构体,这意味着函数参数MyStruct s是主函数中结构体变量s的一个副本。在函数内部对MyStruct s的修改,仅仅修改了这个副本的值,而不会影响主函数中原始的结构体变量s。如果想要修改主函数中结构体变量的值,应该采用传指针方式传递结构体。