C语⾔函数返回⼀位数组,⼆维数组⽅法⼀:
万能的结构体:构造数组的结构体,将函数类型定义为此类型
但是考试的时候应该不太⽅便写结构体,写不下也会很⿇烦,故介绍⽅法⼆
⽅法⼆:
指针传递:
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;
c语言二维数组表示方法
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;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论