Вы не можете передавать столбцы в C. Вы передаете указатели на начало некоторых непрерывных данных.
Строки в C непрерывно записываются в память, поэтому вы передаете указатель на первый элемент некоторой строки (вы делаете это неявно, используя его имя: matrix[row]
; явная версия будет &matrix[row][0]
), и вы можете использовать строку, перебирая непрерывную память.
Чтобы использовать столбцы, вам необходимо передать весь массив (указатель на первый элемент в 2D-массиве, на самом деле), а также передать длину строк, а затем функция должна перейти на эту длину, чтобы перейти от элемента того же столбца к следующему. Это одно из многих возможных решений, вы можете разработать любое другое решение, например, скопировав столбец во временный массив, как указано в каком-то комментарии; но он обычно используется, например, в функциях cblas .