1、随机生成数组并返回指针数组
该资料引用:参考文献1:C函数返回数组
C 语言不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。
实现源码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* 要生成和返回随机数的函数 */
int *getRandom() //别忘了加上指针“*”
{
static int r[10];
int i;
/* 设置种子 */
srand((unsigned)time(NULL));
for (i = 0; i < 10; ++i)
{
r[i] = rand();
printf("r[%d] = %d\n", i, r[i]);
}
return r;//返回时只需“r”即可
}
/* 要调用上面定义函数的主函数 */
int main()
{
/* 一个指向整数的指针 */
int *p;
int i;
p = getRandom();
for (i = 0; i < 10; i++)
{
printf("*(p + %d) : %d\n", i, *(p + i));
//调用时别忘了加上指针“*”
}
system("pause");
return 0;
}
实现结果:
2、形参传入数组
备注:事实上,函数里有数组参数,其实传递的是指针。
比如你函数声明为:
void fun(int a[4]);
你在main函数中可以这样调用:
int b[4] = {5,7,1,2};
fun(b); //你可以这样调用
此外, 一般而言,局部变量在函数调用完之后,所占用内存空间就会被释放,如 int a[maxsize];但,如果用 static之后,变量就会存储在静态存储区,函数调用完之后,并不会释放.还有一种
int *a;
a=(int*)malloc(maxsize);
这种动态分配存储空间,函数在调用完之后,也不会释放,除非程序结束,或主动释放。
#include <stdio.h>
int *ff()
{
int i;
static int a[10];
for (i = 0; i < 10; i++)
a[i] = 2*i + i*(i+1)*i -(i+1)*(i+1);
return a;
}
int main()
{
int i;
int *a;
a = ff();
for (i = 0; i < 10; i++)
printf("%d\n", a[i]);
system("pause");
return 0;
}
执行结果:
3、使用结构体函数返回数组
实现源码:
#include <stdio.h>
#include <math.h>
//结构体返回数组
typedef struct arr
{
double a[10];
} arr;
arr farr()
{
int i;
arr a;//定义结构体
for (i = 0; i < 10; i++)
a.a[i] = i*i + sin(i+1);//使用结构体
return a;//返回结构体
}
int main()
{
int i;
arr a;
a = farr();//调用函数
for (i = 0; i < 10; i++)
printf("%lf\n", a.a[i]);
system("pause");
return 0;
}
执行结果:
4、函数返回多维数组
实现源码:
#include <stdio.h>
//返回多维数组
int (*fun(int b[][2]))[2]
{
return b;
}
int main()
{
int i, j;
int a[2][2] = {1, 2, 5, 6};
int(*c)[2];
c = fun(a);
for (i = 0; i < 2; i++)
for (j = 0; j < 2; j++)
printf("%d ", c[i][j]);
system("pause");
return 0;
}
5、共用结构体数组的返回
源码实现:
#include <stdio.h>
#include <stdlib.h>
typedef struct _fenshu
{
int fenzi;
int fenmu;
}fenshu;
fenshu *add(fenshu *a, fenshu *b)
{
fenshu *s = (fenshu *)malloc(sizeof(fenshu));
s->fenmu = a->fenmu * b->fenmu;
s->fenzi = a->fenmu * b->fenzi + a->fenzi * b->fenmu;
return s;
};
fenshu *mul(fenshu *a, fenshu *b)
{
fenshu *s = (fenshu *)malloc(sizeof(fenshu));
s->fenmu = a->fenmu * b->fenmu;
s->fenzi = a->fenzi * b->fenzi;
return s;
}
int main()
{
fenshu a = {1, 2};
fenshu b = {2, 5};
fenshu *s;
s = mul(&a, &b);
printf("%d %d\n", s->fenmu, s->fenzi);
free(s);
system("pause");
return 0;
}