Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача двумерного массива в функцию / 7 сообщений из 7, страница 1 из 1
15.09.2014, 18:16
    #38747116
kuritel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача двумерного массива в функцию
Как я знаю, имя массива и указателя тождественны в С++. Из этого следует, что можно инициализировать указатель, а работать с ним, как с именем массива, добавив индекс (квадратный скобки) или смещение к имени массива и круглые скобки со звёздочкой... Но не в этом суть. Я пробовал ввести передачу в функцию двумерного массива (столбы и строки) - не вышло. Очевидно, что где-то вкралась ошибка.
Вот код:

Код cpp:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
#include "stdafx.h"

#include 



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    {

        for (int j=0; j        {

    cout<<"arr["<        }

    }

}



Хотя бы дайте общие понятия по логике передачи адреса двух- и более мерного массива в функцию, а дальше, я сам попробую написать =)
...
Рейтинг: 0 / 0
15.09.2014, 18:39
    #38747139
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача двумерного массива в функцию
kuritelОчевидно, что где-то вкралась ошибка.
Ошибка вкралась уже в начальных рассуждениях. В С нет двумерных массивов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.09.2014, 19:03
    #38747157
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача двумерного массива в функцию
Интересно, что употреблял автор, когда придумал синтаксис:

int arr[size1[size2....
...
Рейтинг: 0 / 0
15.09.2014, 19:34
    #38747187
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача двумерного массива в функцию
kuritelКак я знаю, имя массива и указателя тождественны в С++.


Это неправда, они НЕ тождественны.

kuritelИз этого следует, что можно инициализировать указатель, а работать с ним, как с именем массива, добавив индекс (квадратный скобки) или смещение к имени массива и круглые скобки со звёздочкой...


А в этом ты прав. Можно.

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

Как уже сказали, в С и С++ нет двумерных (многомерных) массивов.
Далее, многомерные массивы можно имитировать четырьмя способами (может есть и больше):

хранить одномерный массив NxM и перевычислять адреса по двум координатам. В С++ можно обернуть это в класс.

хранить массив массивов

хранить массив указателей на массивы (как правило, динамически выделенные)

(только С++) имитировать многомерные массивы вложенными векторами (вектор вектора, вектор вектора вектора и т.д.)

Далее всё зависит от того, какой из способов ты выберишь .
...
Рейтинг: 0 / 0
15.09.2014, 19:36
    #38747189
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача двумерного массива в функцию
авторЯ пробовал ввести передачу в функцию двумерного массива (столбы и строки) - не вышло.

Передавать в функции массивы нельзя.
Можно передавать либо указатели либо ссылки на одни из тех структур, что я уже выше перечислил.
...
Рейтинг: 0 / 0
16.09.2014, 02:18
    #38747367
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача двумерного массива в функцию
kuritel Как я знаю, имя массива и указателя тождественны в С++.

Как вам уже сказал MasterZiv, это не так.
Указатель это переменная содержащая адрес другой переменной. Именем массива является указательное выражение, константа, а не переменная. Потому, любые операция реинициализации по отношению к имени массива будут незаконны.


kuritel Из этого следует, что можно инициализировать указатель, а работать с ним, как с именем массива, добавив индекс (квадратный скобки) или смещение к имени массива и круглые скобки со звёздочкой...

Мне кажется, что вы написали не то, что хотели сказать. Что значит инициализировать указатель ? Это значит записать в указатель значение (предполагается что вы объявили указатель ранее, а сейчас просто записали в него значение, p=&b, например). А теперь вы собираетесь работать с ним как с именем массива .( Про эту фразу я написал ниже. Допустим сейчас, что эту фразу можно применить.) Для начала вам нужно выделить память, а уже потом работать с этой памятью. (После инициализации указателя у вас есть только одна ячейка памяти, если только вы не инициализировали указатель адресом начала массива(или адресом внутри выделенной области памяти))

Но я думаю, что вы имели другое, и я бы так ответил на ваш вопрос.
Т.к. ваше первое утверждение неверно, то и это соответственно не до конца верно(как минимум).
С большое долей вероятности, сначала появились указатели, а потом уже появились такие типы данных как массивы. Потому, я бы сказал, что операции связанные с адресацией в массиве используют арифметику указателей.

kuritel Но не в этом суть. Я пробовал ввести передачу в функцию двумерного массива (столбы и строки) - не вышло. Очевидно, что где-то вкралась ошибка.
Вот код:

Ваш код поврежден ?
...
Рейтинг: 0 / 0
16.09.2014, 10:44
    #38747539
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача двумерного массива в функцию
SashaMercury,

код был повреждён из-за неверного форматирования.
Почему код безвозвратно при этом теряется -- другой вопрос, но главное, что его не восстановить.

Если kuritel зашлёт ещё раз код открытым текстом или с правильным форматированием, я вставлю его в нужное место.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача двумерного массива в функцию / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]