Технический форум

Технический форум (http://www.tehnari.ru/)
-   C/C++/С# (http://www.tehnari.ru/f42/)
-   -   Передача двумерного массива в функцию (http://www.tehnari.ru/f42/t98374/)

Pavelpla 15.09.2014 19:14

Передача двумерного массива в функцию
 
Как я знаю, имя массива и указателя тождественны в С++. Из этого следует, что можно инициализировать указатель, а работать с ним, как с именем массива, добавив индекс (квадратный скобки) или смещение к имени массива и круглые скобки со звёздочкой... Но не в этом суть. Я пробовал ввести передачу в функцию двумерного массива (столбы и строки) - не вышло. Очевидно, что где-то вкралась ошибка.
Вот код:
Код cpp:
Код:

#include "stdafx.h"
#include <iostream>

using namespace std;

const int size1 = 3;
const int size2 = 4;
int arr[size1[size2 = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
   
void arr_fun (int arr[[size2, int size1);

void main ()
{
    arr_fun (arr[[size2, size1);
    system ("pause");
}
void arr_fun (int arr[[size2, size1)
{
    for (int i=0; i<size1; i++)
    {
        for (int j=0; j<size2; j++)
        {
    cout<<"arr["<<i<<": "<<arr[i[j<<endl;
        }
    }
}

Хотя бы дайте общие понятия по логике передачи адреса двух- и более мерного массива в функцию, а дальше, я сам попробую написать =)

Николай_С 15.09.2014 21:48

Всё очень просто.
В С++ в функцию передается не сам массив, а его адрес (точнее адрес его первого элемента). По этой причине Вы можете в аргументах функции передать или адрес его первого элемента, или имя массива, преобразованное к указателю (int *). Если не сделать преобразование типа, то компилятор даст ошибку. А вот в самой функции с массивом можно работать как угодно, считая его хоть одномерным, хоть многомерным, хоть с плавающей точкой (float) - компилятор ошибку не даст.


Часовой пояс GMT +4, время: 00:47.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.