黑马程序员技术交流社区

标题: 结构体的问题 [打印本页]

作者: 程序猿-2014    时间: 2014-4-10 20:45
标题: 结构体的问题
#include <stdio.h>

typedef struct
{
    int age;
    char *name;
} Student;

void test();

int main()
{
    Student mystu = {20, "jack"};
   
    test(mystu);
   
    printf("%d-%s\n", mystu.age, mystu.name);
   
    return 0;
}

void test(Student stu)
{
    stu.age = 10;
    stu.name = "rose";
}
求解这个题的输出结果    并解释   谢谢
作者: FlyTrem    时间: 2014-4-10 21:12
结果是:20---jack
因为你调用test函数,你只改变了stu的成员变量的值,stu和mystu在两块不同的内存空间,是值传递,根本无法修改mystu内的成员变量。
如果想修改变量,可以通过指针来修改!
作者: 啊康    时间: 2014-4-10 23:06
你的这段代码就相当于变量作为参数在函数之间的传递
而结构体作为函数参数传递也是参数传递,如果想在函数中改变外部结构体的变量,那么只有以指针的形式
当你调用函数将结构体作为参数传递的时候,会在栈内存中开辟一块区域来存储函数以及函数中的数值
当函数结束的时候该区域就释放了,所以当你打印该结构体变量的时候,理所当然打印的是原来结构体初始化的数值,所以结果就一目了然了!
作者: 于清扬    时间: 2014-4-11 01:29
结果是:20---jack
函数形参值传递,不会改变main函数里的值
要改值用指针传递
作者: Freedam    时间: 2014-4-11 03:22
输出是20-jack
void test(mystu);这个函数传的是结构体变量的变量名,也就是相当于值传递。所以将参数传给函数运行时即便函数内给参数重新赋值也改变不了主函数原有变量的大小,除非传指针对其进行操作。例如:
  1. void test(&mystu)
  2. {
  3.     mystu->age = 10;
  4.     mystu->name = "rose";
  5. }
复制代码

作者: 李斌007    时间: 2014-6-18 23:58
说的不错




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2