Chinaunix首页 | 论坛 | 博客
  • 博客访问: 379585
  • 博文数量: 87
  • 博客积分: 983
  • 博客等级: 准尉
  • 技术积分: 685
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-25 07:20
文章分类

全部博文(87)

文章存档

2016年(1)

2015年(3)

2014年(55)

2013年(13)

2012年(15)

分类: C/C++

2014-06-28 10:28:09

对于函数的传出参数,如果这个参数是通过函数体内部的变量赋值得来,它必须比函数体内的那个变量多一级指针,并且这个变量不能位于stack区。
eg:(错误之处欢迎指正)

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include

  3. struct student {
  4.     char *name;
  5.     int num;    
  6. };

  7. int func(struct student **stu)
  8. {
  9.     struct student *std = malloc(sizeof(struct student));    //不能位于栈区
  10.     if (!std)
  11.     {
  12.         printf("malloc error");        
  13.         return -1;
  14.     }
  15.     std->name = "chen_chuang";
  16.     std->num = 3;
  17.     *stu = std;     //stu 必须 比 std 的指针多一级,原因很简单,函数的实参传入到到形参,形参只是从实参复制过来的,
  18.                     // 函数内部只是形参的改变,所以要想改变,只能改变实参指向的内容
  19. }

  20. int main(void)
  21. {
  22.     struct student *sd;
  23.     func(&sd);
  24.     printf("student'name is %s\n",sd->name);
  25.     printf("student'num is %d\n",sd->num);
  26. }
阅读(764) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~