C語言 函式返回一位陣列,二維陣列
阿新 • • 發佈:2018-11-01
方法一:
萬能的結構體:構造陣列的結構體,將函式型別定義為此型別
但是考試的時候應該不太方便寫結構體,寫不下也會很麻煩,故介紹方法二
方法二:
指標傳遞:
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; }