1. 程式人生 > >C獲取函式中多個值的方法

C獲取函式中多個值的方法

C: 關於函式返回值的小思考 1.函式的返回值只能有一個,但如果希望獲得函式中的多個值,可以採用指標的方式。 2.注意向函式傳遞列指標的形式:

void InputArray(int *p, int m, int n){ //這裡傳入的是二維陣列,但形參指標是一維形式
    int i, j;
    for(i = 0; i < m; i++){
        for(j = 0; j < n; j++){
            printf("input the number:\n");
            scanf("%d", &p[ i * N + j] );//也可以換成 p + i * N + j
        }
    }
}

附上求二維陣列最大值及其位置的程式碼:

#include <stdio.h>
#define N 10
void InputArray(int *p, int m, int n);
int FindMax(int *p, int m, int n, int *pRow, int *pCol);
int main() {
    int a[N][N] = {0};
    int m, n;
    int row, col;
    printf("input m, n:\n");
    scanf("%d, %d", &m, &n);
    InputArray(a, m, n);
    printf("The max number is :%d, row: %d, col: %d\n ", FindMax(a, m, n, &row, &col), row + 1, col + 1);
    return 0;
}

void InputArray(int *p, int m, int n){
    int i, j;
    for(i = 0; i < m; i++){
        for(j = 0; j < n; j++){
            printf("input the number:\n");
            scanf("%d", &p[ i * N + j] );//也可以換成 p + i * N + j
        }
    }
}

int FindMax(int *p, int m, int n, int *pRow, int *pCol){//希望返回值,以及行數列數,故後兩個用的是指標
//    int Row = 0, Col = 0;
    int k = p[0];
    int i, j;
    for(i = 0; i < m; i++){
        for(j = 0; j < n; j++){
            if(p[i * N + j] > k){
                k =p[ i * N + j] ;//也可以換成*(p + i * N + j)
                *pRow = i;
                *pCol = j;
            }
        }
    }
    return k;
}

也可將FindMax改為void型,相應的改變如下:

#include <stdio.h>
#define N 10
void InputArray(int *p, int m, int n);
void FindMax(int *p, int m, int n, int *pRow, int *pCol);
int main() {
    int a[N][N] = {0};
    int m, n;
    int row, col;
    printf("input m, n:\n");
    scanf("%d, %d", &m, &n);
    InputArray(a, m, n);
    FindMax(a, m, n, &row, &col);//因為函式沒有返回值,所以FindMax不能寫在printf中了
    printf("The max number is :%d, row: %d, col: %d\n ", a[row][col], row + 1, col + 1);//由於是指標形式傳遞,所以row和col的值可以獲取
    return 0;
}

void InputArray(int *p, int m, int n){
    int i, j;
    for(i = 0; i < m; i++){
        for(j = 0; j < n; j++){
            printf("input the number:\n");
            scanf("%d", p + i * N + j );
        }
    }
}

void FindMax(int *p, int m, int n, int *pRow, int *pCol){
//    int Row = 0, Col = 0;
    int k = p[0];
    int i, j;
    for(i = 0; i < m; i++){
        for(j = 0; j < n; j++){
            if(p[i * N + j] > k){
                k = *(p + i * N + j);
                *pRow = i;
                *pCol = j;
            }
        }
    }
//    return k;
}