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

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

Войти
Регистрация
Восстановить пароль
 
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
#1

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

07.03.2013, 18:58. Просмотров 296. Ответов 5
Метки нет (Все метки)

Добрый день.
Помогите разобраться с шаблоном, а точнее с типом массива. Вот сам код:
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++):

Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении? - C++
Пытаюсь сделать функцию с передачей нескольких параметров,используя битовые операции. В качестве параметров думаю использовать не...

Перечисляемый тип данных.Символьный тип. - C++
1.type месяц = ( янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек ); год = (високосный, невисокосный); var d:28..31;...

Путаница с типами данных TCHAR и char. Какой тип данных выбрать? - C++
Я создавал тему в соседнем разделе:http://www.cyberforum.ru/cpp-networks/thread1119035.html Насколько я понял, то POST-данные в TCHAR...

Типы данных: есть ли универсальный тип, который может заменить все типы данных в Си? - C++
Добрый вечер! Был бы очень признателен, если бы Вы помогли бы мне понять нижеследующие вопросы: 1. Можете ли на понятным для...

тип данных - C++
как создать в С++ тип данных от 0 до 9?

Тип данных - C++
Какой тип данных сможет произвести действие (A*(10^3000))*(B*(10^3000))???

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ev[G]eN
Эксперт С++
5097 / 1535 / 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
Эксперт С++
5097 / 1535 / 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
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
07.03.2013, 22:32 #6
http://informatics.mccme.ru/moodle/m...&chapterid=304
"Чтобы функция могла изменять значения переменных, объявленных в других функциях, необходимо указать, что передаваемый параметр является не просто константной величиной, а переменной, необходимо передавать значения по ссылке"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2013, 22:32
Привет! Вот еще темы с ответами:

тип данных вектор - C++
Помогите пожалуйста. Заполняю элементы динамического вектора, подскажите цикл для этого с командой выхода когда захочу. За раннее спасибо

абстрактный тип данных - C++
надо написать на С++... разработать абстрактный тип данных :двусвязный циклический список. атд должен обеспечивать выполнение следующих...

Тип данных float - C++
1) Какое масимальное целое может содержать float? 2) Точность дробной части у float постоянна, или зафисит от целой части? Буду...

Абстрактный тип данных - C++
Доброго времени суток! Помогите, пожалуйста, с заданием: Создать список произвольной организации. Областью данных каждого элемента...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.03.2013, 22:32
Ответ Создать тему
Опции темы

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