+ -
当前位置:首页 → 问答吧 → 有三个函数,有什么不同

有三个函数,有什么不同

时间:2010-08-01

来源:互联网

有三个函数,有什么不同
  1. void f1(int  p)
  2. {
  3.         

  4. }
复制代码
  1. void f1(int *p)
  2. {
  3.        p=(int *)malloc(SIZE);
  4. }
复制代码


  1. void f1(int **p)
  2. {
  3.        *p=(int *)malloc(SIZE);
  4. }
复制代码
其在内存中是怎么样的,哪种能正确分配内存?

作者: 0vk0   发布时间: 2010-08-01

蛋疼,一个简单的整型数据,直接传参不就行了。

作者: langue   发布时间: 2010-08-01

如果懂汇编的话,这个问题非常容易理解,只是有些人不那么认为,那么只好在 C 语法上绕圈吧

作者: mik   发布时间: 2010-08-01

void f1(int  p){ } 参数方式为传值, p只是个映象,在函数f1中改变p的值无法返回给上层函数;


void f1(int *p){ p=(int *)malloc(SIZE); }  参数为传址,即上层函数给p分配的地址可以传进f1,在f1中改变*p的值可以返回给上层函数;但要注意,如果试图改变p的值,上层函数是无法取到的,就像这个例子,给p分配的空间是无法传给上层函数的。


void f1(int **p){ *p=(int *)malloc(SIZE); } 参数为传址。这个例子中f1中给*p分配的空间可以返回给上层函数的。

作者: gu_wh   发布时间: 2010-08-01

callfunc(。。。)
{
   int *q;
    f1(q);
}

void f1(int *p){ p=(int *)malloc(SIZE); }

p和q是两个地址,调用的时候把q指向的内存区传给了,
所以调用函数开始处p和q指向同一块内存区,如果对指针指向的数据进行操作的话结果是一样的;
不过指针本身是两个指针?
f1执行新的操作,是p指向新的一块内存区,p和q指向不同的内存区,返回后p本身是在栈中分配空间的被收回,分配是数据区malloc成为内存泄露区,而原来的指针q什么也不没有变,感觉p从来就没有存在过一样~~

对于最后一个就是,指向指针的指针,*p就可以改变源指针的指向了,因为把q自己的地址传进来而不是他指向的数据区地址~~~~void f1(int **p)---这是改变地址的方法~~~~

作者: zbhddt6   发布时间: 2010-08-01

第二个就可以把。

作者: pandaiam   发布时间: 2010-08-01

要想实现把给指针分配内存,应该用第三个

作者: liwangli1983   发布时间: 2010-08-01

相关阅读 更多