函数的返回值

函数返回值的问题。

 

1 这是一个大问题,因为我们在很多情况会遇到这种情况,就是要返回一个数组,不管是字符数组还是普通的数字数组,返回值该怎么写呢?

 

:在面对普通的类型:比如int ,char这些都是可以的,但是------但是-------但是,重要的事说三遍:数组,字符数组这种东西在c语言里不是一种类型,所以这个时候有两种方法:

1 返回一个指向数组的指针:

#include<malloc.h>

#include<stdio.h>

 

int main(){

int * retarray();

int * m;

 

m=retarray();

// printf(":::::::::%d\n",*(m+12));

for(int ii=0; ii<9; ii++){

printf("--------%d\n",*(m+ii) );

 

}

//free(m);//free是干啥的???????????????????????

return 0;

 

}

 

 

Int a[10];////////////////////////////////////------------------------------------------------------------

int * retarray(){

 

 

 

for(int i=0; i < 10; i++){

a[i]=i;

}

return a;

}

 

注意:这段代码里,int a[]要声明成全局变量,否则他即使创建了也会消失。

但是所谓的这个数组消失:也就是

 

无论怎么样,他其实也只是保存了m这一个变量,所以输出一个可以,输出一堆就不可以,并且数组消失了,但是空间的内存没有消失。???????????????????????????????

啊哈:

 

2 返回一个结构的形式:

优点:这种形式相对较安全,因为不用去考虑没有释放指针而造成的指针泄露。

缺点:这种形式的缺点就是太占用空间,他先拷贝再返回。

 

Struct tag{

Int a[10];

}x;

 

Struct tag func(){

 

For(int i=0; i < 10; i++){

X.a[i]=m;

}

Return x;

}

 

Int main(){

 

Struct tag y=func();

 

}

 

 

2 释放指针的问题:

posted @ 2017-05-07 16:07  freebirds  阅读(208)  评论(0)    收藏  举报