黑马程序员技术交流社区

标题: 结构体的一个小题目。。。。 [打印本页]

作者: lipeiaiwo    时间: 2014-7-22 19:49
标题: 结构体的一个小题目。。。。
一个小题目,怎么也想不明白哎。。。。为什么输出的是 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";
}
作者: fantacyleo    时间: 2014-7-22 20:15
值传递,不可能修改原先的变量。就好像:
void foo(int a)
{
    a = 3;
}

int main(void)
{
    int a =4;
    foo(a);
}
调用foo(a)后,main函数中的a依然是4而不是3。想改变结构体的值,必须传指针
作者: 我是一只小小强    时间: 2014-7-22 20:51
函数内不能改变外部成员变量的值,想在函数内改变外部改变成员变量的值可以用指针或者block
作者: lipeiaiwo    时间: 2014-7-22 21:28
fantacyleo 发表于 2014-7-22 20:15
值传递,不可能修改原先的变量。就好像:
void foo(int a)
{

是所有的值传到外面,想在外面修改,必须用指针才可以吗? 比如int类型的数组也不可以吗?
作者: fantacyleo    时间: 2014-7-22 21:44
lipeiaiwo 发表于 2014-7-22 21:28
是所有的值传到外面,想在外面修改,必须用指针才可以吗? 比如int类型的数组也不可以吗? ...

数组名本身就是指针常量,所以传数组是可以直接改数组元素的
作者: 心之信子    时间: 2014-7-22 22:27
void test(Student stu)这个函数  你可以根据老师讲的视频中的内容画一个图表,在这个函数中你的函数里的赋值也没有赋值到函数结构体中在执行完函数代码后,函数就会除去存储空间,就剩下原来的函数值,并没有改变,所以输出为20 jack。




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