Форум программистов, компьютерный форум CyberForum.ru

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

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

Указатели. Динамические двумерные массивы. C++
Где хранятся аргументы, передаваемые в функцию C++
Динамические двумерные массивы через указатели. Как это происходит? C++
C++ Двумерные массивы. Написать функцию, которая меняет значения диагональных элементов
Указатели и массивы. Передача массива в функцию по указателю C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sonance
6 / 6 / 3
Регистрация: 15.02.2013
Сообщений: 55
06.11.2013, 11:04     Указатели на передаваемые двумерные массивы в функцию #2
Код покажи
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++
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.11.2013, 18:55     Указатели на передаваемые двумерные массивы в функцию #4
Если правильно понял вопрос: имя массив, при передаче в функцию, прербразуется в указатель на начало этотго массива. В остальных случаях данные передаются как обычно (или по значению, или по ссылке, или по указателю).
Yandex
Объявления
06.11.2013, 18:55     Указатели на передаваемые двумерные массивы в функцию
Ответ Создать тему
Опции темы

Текущее время: 02:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru