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

Тип данных - массив - C++

Восстановить пароль Регистрация
 
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
07.03.2013, 18:58     Тип данных - массив #1
Добрый день.
Помогите разобраться с шаблоном, а точнее с типом массива. Вот сам код:
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
#include <iostream>
#include <iomanip>
 
using namespace std;
 
template <class T,int n>
void init (T (&arr) [n])
{
    for (int i=0;i<n;i++)
    {
        arr[i]=i;
    }
}
 
template <class T,int n>
void out (T (&arr) [n])
{
    for (int i=0;i<n;i++)
    {
        cout << setw(3) << arr[i];
    }
    cout << "\n";
}
 
int main()
{
    const int n=10;
    int arr[n];
 
    init(arr);
    out(arr);
 
    return 0;
}
Меня интересует вот этом кусочек:
C++
1
2
template <class T,int n>
void init (T (&arr) [n])
Как правильно читать (понимать синтаксис) (&arr)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2013, 18:58     Тип данных - массив
Посмотрите здесь:

Структурный тип данных C++
C++ тип данных
C++ Новый тип данных
символьный тип данных C++
Тип данных float C++
Ограничить тип данных C++
C++ Тип данных
Абстрактный тип данных C++
C++ Тип данных long
Собственний тип данных C++
Неполный тип данных C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
07.03.2013, 19:39     Тип данных - массив #2
это параметр функции, передающийся по ссылке. по ссылке параметр передается для того, что бы значение, которое примет параметр в функции, осталось таким же и в главной программе.
как-то так..
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
07.03.2013, 21:44  [ТС]     Тип данных - массив #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
#include <iostream>
using namespace std;
 
template <class T, int n>
void init (T (*arr) [n])//так работает
{
    for (int i=0;i<n;i++)
    {
        //arr[i]=i;//(9): error C2440: '=' : cannot convert from 'int' to 'int [10]'
        arr[0][i]=i;
    }
    
}
 
template <class T, int n>
void init2 (T arr [n])//а так нет
{
    for (int i=0;i<n;i++)
    {
        arr[i]=i;
    }
    
}
void out (int arr [10], int n)//хотя так работает
{
    for (int i=0;i<n;i++)
    {
        cout << arr[i] << " " ;
    }
    
}
 
int main()
{
    const int n=10;
    int arr[n];
    init(&arr);
    out(arr,n);
    init2(arr);
    out(arr,n);
    return 0;
}
почему так???
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
07.03.2013, 22:27     Тип данных - массив #4
как я и написал.
в первом случае, параметр передается по ссылке и меняется во время выполнения этой функции, возвращая измененное значение в основную программу.
во втором параметр передается по значению, он изменяется только в самой функции и все, в основной программе - нет.

Добавлено через 1 минуту
Цитата Сообщение от fuelcs Посмотреть сообщение
void out (int arr [10], int n)//хотя так работает
потому, что массив выводится в самой функции
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
07.03.2013, 22:29  [ТС]     Тип данных - массив #5
Ev[G]eN, как я понимаю
C++
1
init(&arr);
означает взятие адреса, при чем здесь ссылки?
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
07.03.2013, 22:32     Тип данных - массив #6
http://informatics.mccme.ru/moodle/m...&chapterid=304
"Чтобы функция могла изменять значения переменных, объявленных в других функциях, необходимо указать, что передаваемый параметр является не просто константной величиной, а переменной, необходимо передавать значения по ссылке"
Yandex
Объявления
07.03.2013, 22:32     Тип данных - массив
Ответ Создать тему
Опции темы

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