【问题标题】:Pointers to columns of 2D array指向二维数组列的指针
【发布时间】:2012-03-26 23:18:52
【问题描述】:

我有一个使用 A[N*i+j] 实现为一维数组的 NxN 二维数组。我想引用数组的列,并能够将它们作为常规列向量传递给函数。您可以在下面看到 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] 类型的参数,但我对如何将指针向量作为向量元素指向的值的向量传递感到困惑。

【问题讨论】:

    标签: c arrays pointers matrix


    【解决方案1】:

    不可能做你想做的事,至少在 C 中是不可能的。

    【讨论】:

      【解决方案2】:

      在 C 中,您不能将数组作为参数传递,也不能从函数中返回它们。您只能像当前所做的那样传递指针。 vector 是 C++ 中的一个 STL 类,您可以将其与 array 互换使用且容易混淆。您可以传递一个指针,该指针可以引用 real 二维数组中列中的第一个元素,但不能用于 ni+j 数组。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-06-11
          • 2012-01-26
          • 1970-01-01
          相关资源
          最近更新 更多