方法一:
万能的结构体:构造数组的结构体,将函数类型定义为此类型
但是考试的时候应该不太方便写结构体,写不下也会很麻烦,故介绍方法二
方法二:
指针传递:
1、返回一维数组
例子:将数组每一位加一:
#include<stdio.h>
#define N 10
int main(){
int *addOne(int a[]);
int a[N]={1,2,3,4,5,6,7,8,9,10};
int i;
printf("\n调用函数之后:\n");
int *b = addOne(a);
for(i=0;i<N;i++)
printf("%d\t",b[i]);
}
int *addOne(int a[]){
int i;
for(i=0;i<N;i++)//全部加一
a[i] += 1;
return a;
}
若在函数中新建一个指针作为返回,则需要为其申请空间
注:int型占4个字节,char 1字节,double 8字节
int *addOne(int a[]){
int *b = (int *)malloc(N*sizeof(int));//定一个int型的指针b,并申请N*sizeof(int)个字节的存储空间,即N*4个字节
int i;
for(i=0;i<N;i++)//全部加一
b[i] = a[i] + 1;
return b;
}
2、返回二维数组
#include<stdio.h>
#define M 3
#define N 2
int main(){
int **addOne(int a[M][N]);
int a[M][N]={{1,1},{2,2},{3,3}};
int i,j;
printf("\n调用函数之后:\n");
int **b = addOne((int **)a);
for(i=0;i<M;i++)
for(j=0;j<N;j++)
printf("%d\t",*((int *)b+N*i+j));
}
int **addOne(int a[M][N]){
int **b =(int **)malloc(M*sizeof(int *));//先申请M个指针型字节的空间
for (int i=0;i<M;i++)
b[i]=(int *)malloc(N*sizeof(int));//然后依次按一维申请
int i,j;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
*((int *)b+N*i+j) = *((int *)a+N*i+j) + 1;//找地址,如同数据结构中矩阵找地址相同,首地址+(次数行数-1)*总列数+次数列数-1
//i,j都是从0开始,可以不用减1
return b;
}