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

Взаимный обмен значений указателей в параметрах функции - C++

Войти
Регистрация
Восстановить пароль
 
Hard_core94
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 4
09.02.2014, 18:56     Взаимный обмен значений указателей в параметрах функции #1
Необходимо создать шаблонную функцию
C++
1
void f(int *x, float *y)
в которой *х - указатель на массив, состоящий из целых чисел, *у - указатель на массив, состоящий из чисел типа float

Я хотел поэлементно обменять массивы

Вот что получилось

C++
1
2
3
4
5
6
7
template <class typename A, class typename B>
void f(A *x, B *y)
{
    A temp = *x;
    *x = A *y;
    *y = B temp;
}
Но преподавателю не понравилось, что я указателю присвоил указатель. Соответственно задание не выполнено.

Помогите пожалуйста!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2014, 18:56     Взаимный обмен значений указателей в параметрах функции
Посмотрите здесь:

bool в параметрах функции C++
Обмен значений между двумя вещественными переменными. C++
Обмен значений 2 указателей в функции C++
C++ Указатели в параметрах функции
C++ Диапазон значений указателей
Как реализовать флаги в параметрах функции C++
C++ Таблица в параметрах функции
C++ Ошибка компиляции при неправильных входных параметрах функции
C++ Ключевое слово class в параметрах функции
C++ Как передать вектор в параметрах функции класса?
Ошибка в параметрах функции C++
C++ Не могу понять для чего третья переменная в параметрах функции

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 339
Записей в блоге: 2
10.02.2014, 02:27     Взаимный обмен значений указателей в параметрах функции #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ну так ему правильно не понравилось. Указатель
C++
1
A *x
- это по факту адрес в памяти где начинается массив типа A, т.е. адрес первого элемента массива (тот который имеет индекс 0). Если прибавить к нему единицу
C++
1
x += 1;
, то он уже будет указывать на следующий элемент, так как они всегда расположены подряд. присвоение указателей, в данной ситуации, занятие действительно бессмысленной, так как Вы, по факту, ничего не измените. Что где хранилось то там храниться и будет. И по выходу из метода оригиналы указателей на массивы даже не изменятся.

Правильно будет перебрать элементы в цикле, но тогда нужно знать размеры массивов. Можно, например передать размеры третьим параметром. Они всё равно должны быть одинаковые, так что можно ввести один параметр размера для обоих. Откуда взять размер? Очень просто: он известен тому, кто объявит массивы вызовет ваш метод для них.

Добавлено через 3 минуты
Как-то так:

C++
1
2
3
4
5
6
7
8
9
10
11
template <class typename A, class typename B>
void f(A *x, B *y, int ArraySize)
{
    A temp;
    for(int i=0; i<ArraySize; i++)
    {
        temp = x[i];
        x[i] = (A)y[i];
        y[i] = (B)temp;
    }
}
Yandex
Объявления
10.02.2014, 02:27     Взаимный обмен значений указателей в параметрах функции
Ответ Создать тему
Опции темы

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