c语言如何实现在函数外部申明指针在函数内部申请内存?

张为 发布于 2013/09/04 12:22
阅读 869
收藏 2

如果这样写:

 这样是不成功的。 

这样写:

就可以。

为什么。正确的写法应该是怎样的的。

加载中
0
中山野鬼
中山野鬼

楼主实际上你是在折腾两件事情。你的两个例子。

核心问题是malloc申请完的空间地址是否被返回。。

int * init(int *a){

    a = (int*)mailloc...;

}

这个写法,a的空间在哪里并不重要。语法没错。哈。

张为
张为
对。理解了malloc的原理后,就都想明白了。 多谢解答。
0
小耶果
小耶果
正确的写法是 void init(int** a) { *a=(int*)mall....}   init(&a) C++则可以用指针的引用.
张为
张为
我可不可以这样理解。 传入的虽然是指针 但是申请内存是对指针的操作 而不是对指针指向对象的操作 所以 内存申请的不成功的。
小耶果
小耶果
回复 @张为 : 传入的a已不是a,此a非彼a.
张为
张为
指针不是指向申请的内存区么? 为什么第一种方法是不行的?
0
小耶果
小耶果
你可以呼唤@中山野鬼来扫盲.
张为
张为
多谢解答。
0
Soga
Soga

你基础不扎实,需要学习

void init(int **a)

init(&a)

实参,形参的问题,自己好好琢磨。多说无益!

张为
张为
多谢解答。 我理解实参,形参。 我去了解了malloc函数的原理就理解了。
0
泡不烂的凉粉
泡不烂的凉粉

void init(int *a){a=....}

你这样定义个函数. 无论传入参数如何. 都不会有返回. 另外一点. 对于没返回的函数.无论你怎么操作.都不可能改变函数外边的状态.

简单的例子.  void f(int x){...} 外部我无论如何调用 f(123) 或者 f(456)  ,甚至 f(a) 都不不可能改变123,456或者a的值. 虽然例子里用的是 *a. 不过原理一样. 

要想改变 *a 的值 你至少在函数里, 应该写成 *a =....; 否则, 函数里的 a 和函数外的a 是没联系的. 有联系的只有  函数里的 *a 和函数外的 *a ,指向相同的内存地址.

明白了这点. 剩下的就好理解了. 当然, 代码本身没有错. 至少语法上没错.

张为
张为
多谢解答 已经理解了。
返回顶部
顶部