Указатели на столбцы двумерного массива - PullRequest
1 голос
/ 27 марта 2012

У меня есть двумерный массив 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 ]

3 голосов
/ 27 марта 2012

Невозможно делать то, что вы хотите, по крайней мере, не в C.

0 голосов
/ 27 марта 2012

C основано на строке для доступа к элементам, поэтому вы можете передать адрес строки, но чтобы получить значения для столбцов, вам нужно будет пройти всю матрицу и затем получить доступ к матрице, используя индексы строк и столбцов, или выполните вычисления самостоятельно, чтобы получить правильные элементы, если вы просто передадите адрес матрицы (вам также нужно будет передать число столбцов и, возможно, строк для вычисления, чтобы определить местоположение элемента).

0 голосов
/ 27 марта 2012

В C вы не можете передавать массивы в качестве аргументов или возвращать их из функций. Вы можете передавать указатели только так, как делаете сейчас. vector - это класс STL в C ++, который вы используете взаимозаменяемо и путанно с array. Вы можете передать указатель, который может ссылаться на первый элемент в столбце в массиве real 2D, но не для массива ni + j.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...