指向2D数组列的指针

时间:2012-03-26 23:18:52

标签: c arrays pointers matrix

我使用A [N * i + j]将NxN 2D阵列实现为1D阵列。我想引用数组的列,并能够将它们作为常规列向量传递给函数。您可以在下面看到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 个答案:

答案 0 :(得分:3)

不可能做你想要的,至少不能用C。

答案 1 :(得分:0)

在C中,您不能将数组作为参数传递,也不能从函数返回它们。你只能传递像你现在这样的指针。 vector是C ++中的STL类,您可以与array互换使用并且容易混淆。您可以传递一个指针,该指针可以引用真实 2D数组中列中的第一个元素,但不能传递ni + j数组。

答案 2 :(得分:0)

C是基于行的访问元素,因此您可以传递行的地址,但要获取列的值,您必须传递整个矩阵,然后使用行和列索引访问矩阵,或者如果你只是传递矩阵的地址,你自己做计算以获得正确的元素(你还必须传递列数和可能的行以进行计算以确定元素的位置)。

相关问题