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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lipeiaiwo 中级黑马   /  2014-7-22 19:49  /  1706 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个小题目,怎么也想不明白哎。。。。为什么输出的是 20 jack。
结构体不能传到外面,还是在外面不能修改?

#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 个回复

倒序浏览
值传递,不可能修改原先的变量。就好像:
void foo(int a)
{
    a = 3;
}

int main(void)
{
    int a =4;
    foo(a);
}
调用foo(a)后,main函数中的a依然是4而不是3。想改变结构体的值,必须传指针
回复 使用道具 举报
函数内不能改变外部成员变量的值,想在函数内改变外部改变成员变量的值可以用指针或者block
回复 使用道具 举报
fantacyleo 发表于 2014-7-22 20:15
值传递,不可能修改原先的变量。就好像:
void foo(int a)
{

是所有的值传到外面,想在外面修改,必须用指针才可以吗? 比如int类型的数组也不可以吗?
回复 使用道具 举报
lipeiaiwo 发表于 2014-7-22 21:28
是所有的值传到外面,想在外面修改,必须用指针才可以吗? 比如int类型的数组也不可以吗? ...

数组名本身就是指针常量,所以传数组是可以直接改数组元素的
回复 使用道具 举报
void test(Student stu)这个函数  你可以根据老师讲的视频中的内容画一个图表,在这个函数中你的函数里的赋值也没有赋值到函数结构体中在执行完函数代码后,函数就会除去存储空间,就剩下原来的函数值,并没有改变,所以输出为20 jack。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马