函数的返回值
函数返回值的问题。
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 释放指针的问题:
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号