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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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. }
复制代码

5 个回复

正序浏览
形式参数不能改变实际参数,如果传的是地址,接收的是指针的可以改变实际参数
test1(&mystu);  取出地址  void test1(Student * stu)  传到形式参数中 (*)(stu.age)=10
假如:mystu的地址是ffc1  存储空间的值为20
        (*)(stu.age)的地址指向的空间就是mystu的存储空间
将10赋值给它,也就改变了mystu的存储空间把20改变成了10
回复 使用道具 举报
函数调用时,会把实参赋值给形参,再函数里,你修改的只能是形参,它只是外面实参的拷贝体。
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报
求解,同问!
回复 使用道具 举报
#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;
}

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马