A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程序猿-2014 中级黑马   /  2014-4-10 20:45  /  1858 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#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";
}
求解这个题的输出结果    并解释   谢谢

5 个回复

倒序浏览
结果是:20---jack
因为你调用test函数,你只改变了stu的成员变量的值,stu和mystu在两块不同的内存空间,是值传递,根本无法修改mystu内的成员变量。
如果想修改变量,可以通过指针来修改!
回复 使用道具 举报
你的这段代码就相当于变量作为参数在函数之间的传递
而结构体作为函数参数传递也是参数传递,如果想在函数中改变外部结构体的变量,那么只有以指针的形式
当你调用函数将结构体作为参数传递的时候,会在栈内存中开辟一块区域来存储函数以及函数中的数值
当函数结束的时候该区域就释放了,所以当你打印该结构体变量的时候,理所当然打印的是原来结构体初始化的数值,所以结果就一目了然了!
回复 使用道具 举报
结果是:20---jack
函数形参值传递,不会改变main函数里的值
要改值用指针传递
回复 使用道具 举报
输出是20-jack
void test(mystu);这个函数传的是结构体变量的变量名,也就是相当于值传递。所以将参数传给函数运行时即便函数内给参数重新赋值也改变不了主函数原有变量的大小,除非传指针对其进行操作。例如:
  1. void test(&mystu)
  2. {
  3.     mystu->age = 10;
  4.     mystu->name = "rose";
  5. }
复制代码
回复 使用道具 举报
说的不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马