Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
scotty
28 / 28 / 1
Регистрация: 09.09.2012
Сообщений: 131
#1

Указатели на передаваемые двумерные массивы в функцию - C++

06.11.2013, 10:16. Просмотров 247. Ответов 3
Метки нет (Все метки)

Доброго времени суток)
Вчера озадачился новым. В недавнем времени перешел на vs 2013 и тут при написании ф-ии решил передать в нее массив тк кк ф-ия копирует же как данные, а после завершения удаляет. По крайне мере такое было с классом, когда я его передавал в ф-ию. А тут мне необходимо было передать в ф-ую двумерный массив, после недолгого гугления понял что двумерные передаются с указанием второй размерности arr[][n] и тут я не поставил указатель на него. При выходе из ф-ию я увидел что измененные значения в массиве сохранились, вопрос почему? или почему тогда нужно передавать указатель на класс, а на массив не обходимо?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2013, 10:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатели на передаваемые двумерные массивы в функцию (C++):

Указатели: функции, двумерные массивы - C++
мне нужно вернуть из функции getArray двумерный построенный массив в функцию main, для передачи следующей функции (ещё не написана). ...

Динамические двумерные массивы через указатели. Как это происходит? - C++
Вот типичная идентификация двумерного массива (NxM): int** mass = new int*; for(i=0; i<N; i++) mass = new int; Помогите...

Указатели и массивы. Передача массива в функцию по указателю - C++
Как передать массив в функцию,которая должна заполнить этот массив ? Вот,что я составил, но компилятор ругается: #include "stdafx.h" ...

Двумерные массивы. Написать функцию, которая меняет значения диагональных элементов - C++
уважаемые программисты прошу помочь с программой на двумерный массив т.к. я не в силах это сделать!!! нужно создать функцию к этой...

Типы передаваемые в функцию - C++
вобщем, написал программу, она малость топорная, но, беда, я понимаю что я не те значения передаю функциям, но догадаться не могу как...

Где хранятся аргументы, передаваемые в функцию - C++
собственно - сабж... интересует вопрос, где же (в какой памяти) всё таки хранятся аргументы, которые передаются в функцию? и где можно...

3
Sonance
6 / 6 / 3
Регистрация: 15.02.2013
Сообщений: 56
06.11.2013, 11:04 #2
Код покажи
0
scotty
28 / 28 / 1
Регистрация: 09.09.2012
Сообщений: 131
06.11.2013, 18:33  [ТС] #3
C++
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
int minx, maxx, miny, maxy;
int stx = 17, sty = 2;
int finx = 7, finy = 13;
 
 
int main()
{
    void show_arr(int [][n]);
    void mask_arr(int [][n], int [][n]);
    setlocale(LC_ALL, "Russian");
    ifstream in("matrix_20x20.txt");
    int arr[n][n];
    int tmp_arr[n][n];
    string s;
 
    for (int i = 0; i < 20; i++)
    {
        for (int j = 0; j < 20; j++)
        {
            in >> arr[i][j];
        }
    }
    // Старт 2, 17    Финиш  13,  7
    show_arr(arr);
    system("cls");
    mask_arr(arr, tmp_arr);
    arr[17][2] = 13;
    for (int i = stx - 1; i < stx + 2; i++)
    {
        for (int j = sty - 1; j < sty + 2; j++)
        {
            cout << tmp_arr[i][j] << " ";
        }
        cout << endl;
    }
    getch();
    return 0;
 
}
 
 
 
void mask_arr(int arr[][n], int tmp_arr[][n])
{
    
    int val = 1;
    tmp_arr[stx][sty] = 0;
 
    if ((arr[stx + 1][sty] != 90) || (arr[stx + 1][sty] != 99))
    {
        maxx += 1;
        tmp_arr[stx + 1][sty] = val;
    }
    if ((arr[stx - 1][sty] != 90) || (arr[stx - 1][sty] != 99))
    {
        minx += 1;
        tmp_arr[stx - 1][sty] = val;
    }
    if ((arr[stx][sty + 1] != 90) || (arr[stx][sty + 1] != 99))
    {
        maxx += 1;
        tmp_arr[stx][sty + 1] = val;
    }
    if ((arr[stx][sty - 1] != 90) || (arr[stx][sty - 1] != 99))
    {
        miny += 1;
        tmp_arr[stx][sty - 1] = val;
    }
}
Тут всё гут, но вопрос состоит именно в том: почему ф-ия не копирует передаваммые данные а ссылается напрямую на них или это работает только с абстрактными типами данных такие как класс, структура где есть прямая необходимость делать указатель на них? тк кк в противном случае в варианте с классом, ф-ия копирует его в ф-ию и работает там с копией, а не тк кк в вышеуказанном примере с массивом.
З.Ы. мне всегда казалось что ф-ия копирует передаваемые данные в ф-ию и работает с копией, имхо.

Добавлено через 5 часов 36 минут
up+

Добавлено через 1 час 22 минуты
up++
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.11.2013, 18:55 #4
Если правильно понял вопрос: имя массив, при передаче в функцию, прербразуется в указатель на начало этотго массива. В остальных случаях данные передаются как обычно (или по значению, или по ссылке, или по указателю).
0
06.11.2013, 18:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2013, 18:55
Привет! Вот еще темы с ответами:

Конверсия указателя из double в int, пропускает передаваемые переменные в функцию - C++
Здрасти, такая проблема код : #include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;cstring&gt; using namespace std; void...

Написать функцию, проверяющую передаваемые параметры и генерирующую в случае надобности подходящее исключение - C++
Функция, реализуемая в задании, обязана выполнять проверку передаваемых параметров и генерировать подходящее исключение в случае ошибочных....

Отсортировать массив и вывести на экран (массивы и указатели на указатели) - C++
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F студента. Отсортировать массив S по...

Указатели на массивы. Указатели и функции - C++
Вот задача: Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать: -Элементы обоих массивов; -Общие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.