黑马程序员技术交流社区

标题: 求运行结果,并解释下为何值没变 [打印本页]

作者: 逆流瞅瞅    时间: 2015-5-17 22:41
标题: 求运行结果,并解释下为何值没变
  1. #include <stdio.h>

  2. typedef struct
  3. {
  4.     int age;
  5.     char *name;
  6. } Student;

  7. void test();

  8. int main()
  9. {
  10.     Student mystu = {20, "jack"};
  11.    
  12.     test(mystu);
  13.    
  14.     printf("%d-%s\n", mystu.age, mystu.name);
  15.    
  16.     return 0;
  17. }

  18. void test(Student stu)
  19. {
  20.     stu.age = 10;
  21.     stu.name = "rose";
  22. }
复制代码

作者: ~缘~    时间: 2015-5-17 23:18
#include <stdio.h>

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

Student  test(Student stu);

int main()
{
    Student mystu = {20, "jack"};

   Student newstu = test(mystu);

    printf("%d-%s\n", newstu.age, newstu.name);

    return 0;
}

Student test(Student stu)
{
    stu.age = 10;
    stu.name = "rose";
    return stu;
}


作者: 梦初醉    时间: 2015-5-18 00:54
求解,同问!
作者: 香草芭芙    时间: 2015-5-18 01:47
  1. #include <stdio.h>

  2. typedef struct {
  3.     int age;
  4.     char * name;
  5. } Student;

  6. void test();
  7. void test1(); // <---

  8. int main()
  9. {
  10.     Student mystu = { 20, "jack" };

  11.     test(mystu);
  12.     test1(&mystu);// <---
  13.     printf("%p\n", &mystu); // <---看内存就知道了  0x7fff5fbff838 , 传引用 & 传值的 区别...
  14.     printf("%d-%s\n", mystu.age, mystu.name);

  15.     return 0;
  16. }

  17. void test(Student stu)
  18. {
  19.     printf("%p\n", &stu); // <---看内存就知道了 0x7fff5fbff810 , 传引用 & 传值的 区别...
  20.     stu.age = 10;
  21.     stu.name = "rose";
  22. }

  23. void test1(Student * stu) // <---想用方法直接修改就写成 这样...
  24. {
  25.     printf("%p\n", &stu);
  26.     (*stu).age = 10;
  27.     (*stu).name = "rose";
  28. }
复制代码

作者: Emma    时间: 2015-5-18 09:46
函数调用时,会把实参赋值给形参,再函数里,你修改的只能是形参,它只是外面实参的拷贝体。
作者: mingjixiaohui    时间: 2015-5-18 16:59
形式参数不能改变实际参数,如果传的是地址,接收的是指针的可以改变实际参数
test1(&mystu);  取出地址  void test1(Student * stu)  传到形式参数中 (*)(stu.age)=10
假如:mystu的地址是ffc1  存储空间的值为20
        (*)(stu.age)的地址指向的空间就是mystu的存储空间
将10赋值给它,也就改变了mystu的存储空间把20改变成了10




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