Чего не хватает в функции f() чтобы убрать комментарии? Код (Text): #include <stdio.h> // /////////////////// int x[2][3]={1,2,3,4,5,6}; int y[2][2]={10,20,30,40}; //////////////////// int f1(int arr[][3]) { return(arr[1][1]); } ////////////////// int f2(int arr[][2]) { return(arr[1][1]); } ////////////////// /* int f(??????????) { return(arr[1][1]); } */ /////////////// void main(void) { printf("result f1 = %d\n", f1(x)); printf("result f2 = %d\n", f2(y)); // printf("result f = %d\n", f(x));???????????? // printf("result f = %d\n", f(y));???????????? } Возможно ли в принципе передать размерность массива в функцию? В конечном счете нужна функция в которой надо работать со статическими многомерными массивами разных размерностей. Помогите, пожалуйста, знатоки!
Код (Text): // columns - количество столбцов int f(int columns, void *arr) { int i=1,j=1; // i - строка, j - столбец (переменные чисто для наглядности) return *((int *)arr+i*columns+j); }
любая функция строиться так: тип_возращаемого_значения само_название(тип_параметров) для массива будет так тип_возращаемого_значения, название_функции(масив,размер_масива) у тебя результат выводиться на экран, из функции печатает...стало быть вместо вопросов все че угодно мона написать главное чтоб под массив подходило... int array(int arr[],int n); ^----<размер массива
Код (Text): template<typename T, std::size_t N> int size_arr(T(&)[N]) { return N; } int main() { int v[3]; std::cout<<size_arr(v)<<'\n'; }
Солидарен с GoldFinch-ем, шаблонъ круче. Код (Text): template <typename T, int _i1, int _i2> void foo (T (&a)[_i1][_i2]) { for (int i2=0; i2<_i2; i2++) for (int i1=0; i1<_i1; i1++) std::cout<<a[i1][i2]<<std::endl; } int main (int argc, char* argv[]) { int a[5][2]; foo(a); }
GoldFinch, Booster! Я не совсем понял каким образом ваш код можно применить к решению моей задачи. Поясните, пожалуйста, на моем конкретном примере применение вашего шаблона. И чемъ круче.
Во-первых смотря какой язык. В Си шаблоны идут лесом, хотя автор упоминал плюсы в названии темы. Насчёт круче - с одной стороны читаемее. С другой - для каждой размерности по сути будет сгенерирована отдельная функция -> увеличение бинарного кода, в данном случае по-моему не оправданное. А так каждый выбирает что ему нравится. Только не надо говорить что приведение типов это плохо и т.д. Это из области религии. Если ты понимаешь что делаешь и код работает - проблем это никаких за собой не влечёт. А если не понимаешь - то это уже отдельный случай, тут и с шаблонами можно наворотить.