Ну, вам нужно передать размер строки и количество строк:
double doSomethingWithACol(double *matrix, size_t colID, size_t rowSize, size_t nRows);
Теперь вы можете использовать тот факт, что matrix [i] [j] = matrix + i * rowSize + j;
В качестве альтернативы , вы также можете использовать следующую подпись:
double doSomethingWithACol(double *colPtr, size_t rowSize, size_t nRows);
Здесь вам нужно будет передать указатель на первый элемент столбца, который вы хотите обработать, вместо указателя на первую строку.
Пример кода: Этот код суммирует элементы во втором столбце (скомпилируйте с gcc -o main -Wall -Wextra -pedantic -std = c99 test.c ):
#include <stdio.h>
#include <stdlib.h>
double colSum1(double *matrix, size_t colID, size_t rowSize, size_t nRows)
{
double *c = NULL, *end = matrix + colID + (nRows * rowSize);
double sum = 0;
for (c = matrix + colID; c < end; c += rowSize) {
sum += *c;
}
return sum;
}
double colSum2(double *colPtr, size_t rowSize, size_t nRows)
{
double *end = colPtr + (nRows * rowSize);
double sum = 0;
for (; colPtr < end; colPtr += rowSize) {
sum += *colPtr;
}
return sum;
}
int
main(void)
{
double matrix[4][3] = {
{0, 1, 2},
{3, 4, 5},
{6, 7, 8},
{9, 10, 11}
};
printf("%f\n", colSum1(*matrix, 1, 3, 4));
printf("%f\n", colSum2(&matrix[0][1], 3, 4));
printf("%f\n", colSum2(matrix[0] + 1, 3, 4));
return EXIT_SUCCESS;
}