2012-03-26 48 views
1

我有一個NxN二維數組,使用A [N * i + j]作爲一維數組實現。我想引用數組的列並能夠將它們作爲常規列向量傳遞給函數。你可以在下面看到一個N = 3的例子。該函數返回剛方傳遞給它的載體:指向二維數組的列

#include <stdio.h> 

int func(int* vec[3]){ 
    int result=0; 
    for(int i=0;i<3;i++){ 
     result+=(*vec[i])*(*vec[i]); 
     printf("vec[%d]=%d\n",i,*vec[i]); 
    } 
    return result; 
} 

void main(){ 
    int A[]={0,1,2,3,4,5,6,7,8}; 

    int *a[3][3]; 

    for(int i=0;i<3;i++){ 
     for(int j=0;j<3;j++){ 
      a[j][i]=&A[3*i+j]; 
     } 
    } 
    for(int i=0;i<3;i++){ 
     printf("vector %d\n",i); 
     for(int j=0;j<3;j++){ 
      printf("%d\n",*a[i][j]); 
     } 
    } 

    printf("%d\n",func(a[0])); 
} 

這工作,但問題是功能僅適用於int* vec[3]類型的參數。我真正喜歡的是讓函數採用類型爲int vec[3]的參數,但我很困惑我該如何將指針向量作爲向量元素指向的值的向量傳遞。

回答

3

這是不可能做到你想要什麼,至少不是在C.

0

在C中,你不能將數組作爲參數,或者從函數返回它們。你只能通過像你目前正在做的指針。 vector是C++中的STL類,它與array可互換使用。您可以傳遞一個指針,該指針可以引用一個實數二維數組中的列中的第一個元素,但不適用於ni + j數組。

0

C是基於行訪問元素的行,所以您可以傳遞行的地址,但要獲取列的值,您必須傳遞整個矩陣,然後使用行和列索引訪問矩陣,或者如果你只是傳遞矩陣的地址(你還必須傳遞列的數量和可能的行數以確定元素的位置),自己進行計算才能得到正確的元素。