C獲取函式中多個值的方法
阿新 • • 發佈:2018-12-19
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; }