1. 程式人生 > >C語言 函式返回一位陣列,二維陣列

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;
    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;
}