2016-10-23 56 views
1

我要創建一個矩陣,只有一個指針操縱它如何正確使用多維數組中的指針?

我的代碼:

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 

void Matrix(); 
int Fun(int *A, int n, int key); 

int main() 
{ 
Matrix(); 
return 0; 
} 

void Matrix() 
{ 
    int Nel, Larray, i, j, k, a, c, b, Nf; 
    printf("Num of elements: "); 
    scanf("%d", &Nel); 

    int A[Nel][Nel]; 

    srand(time(NULL)); 
    for(b=0;b<Nel;b++) 
    { 
     for(c=0;c<Nel;c++) 
     { 
      A[b][c] = rand() % 100 + 1; 
     } 
    } 

    printf("\n"); 

    for(b=0;b<Nel;b++) 
    { 
     for(c=0;c<Nel;c++) 
     { 
      printf("%d\t",A[b][c]); 
     } 
     printf("\n"); 
    } 
    printf("\n\n"); 

    printf("Num to find? "); 
    scanf("%d", &Nf); 

    Fun(*A, Nel, Nf); 
}//end 


int Fun(int *A, int n, int key) 
{ 
    //just to see if it works 
    int i,j; 

    for(i=0;i<n;i++) 
    { 
    for(j=0;j<n;j++) 
    { 
     printf("%d\t",A); 
     } 
    printf("\n"); 
    } 
} 

在函數fun,給我一個錯誤

printf("%d\t",A); subscripted value is neither array nor pointer nor vector 

我只有用一個指向矩陣的指針。 你可以expalin多維數組中的指針算術? Thx

回答

1

假設您有指向[ROWS_NUM][COLS_NUM]大小的數組的int* arr;,嘗試訪問arr[X][Y]時完成的計算爲arr + (X * COLS_NUM + Y)

一般規則是,多維數組中元素的絕對索引應爲absolute_index = ((index1 * size2 + index2) * size3 + index3) * size4 + index4 .....(您只需向其中添加數組的偏移量)。

你可以看一下這個草圖來了解一個多維數組在內存格式化方式: enter image description here

+0

這是很清楚,但我怎麼能解決我的問題?用2個指針我沒有問題,但我只需要使用一個指針! – HugoB

+0

用'printf(「%d \ t」,*(A +(i * n + j)))'或用'printf(「%d \ t」)替換'printf(「%d \ t」,A) ,A [i * n + j])'並且標記答案已解決,如果有幫助的話。 – tarashypka