linux

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

#include <stdio.h>
#include <stdlib.h>

void test(int* a,int* b)

 b = a;
}

int main(void)
{
   int *a,*b=NULL;
   int c = 2;
   a = &c;
  //b = a;
   test(a,b);

   if(b)
      printf("aaaaaaaaaaaaa:%d\n",*b);
   else
      printf("bbbbbbbbbbbb\n");
}

为什么在函数test赋值之后b还是null?

毛病出在函数test中。编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是 _p,编译器使 _p = p。如果函数体内的程序修改了_p的内容,就导致参数p的内容作相应的修改。这就是指针可以用作输出参数的原因。

正解:

#include <stdio.h>
#include <stdlib.h>

void test(int** a,int** b)

 *b = *a;
}

int main(void)
{
 int *a,*b=NULL;
 int c = 2;
 a = &c;
//b = a;
 test(&a,&b);

 if(b)
  printf("aaaaaaaaaaaaa:%d\n",*b);
 else
  printf("bbbbbbbbbbbb\n");
}

posted on 2011-04-29 14:56  h13  阅读(1859)  评论(0编辑  收藏  举报