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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Необходимо отсортировать слова в строке по алфавиту http://www.cyberforum.ru/cpp-beginners/thread1092848.html
Написать программу в которой вводиться рядок слов, отсортировать слова по первой букве, нужно сделать через использование функций.
C++ Вычислить разность между максимальным и минимальным элементами массива Ввести массив. Вычислить разность между максимальным и минимальным элементами. Только начал изучать с++. Объясните, пожалуйста, как это делать. http://www.cyberforum.ru/cpp-beginners/thread1092845.html
Рамка из символов,С++,циклы, C++
Как сделать рамку из символов ? на подобии этой задачки... Вводим символ и кол-во , получаем фигуру (квадрат , прямоугольник) : #include <iostream.h> void main () { int i,j,k; char ch; cout<<"westi simvol"<<endl;
C++ Перемножение матриц с использованием динамических массивов
Всем здравствуйте) Программа не считает матрицу С (С=A*B). В чём дело не понимаю. #include <iostream> #include <conio.h> using namespace std; void Gen(int **A, int **B, int n, int m, int k); void Vivod(int **A, int **B, int n, int m, int k); void Multi(int **A, int **B,double **C, int n, int m, int k);
C++ Блок-схема алгоритма http://www.cyberforum.ru/cpp-beginners/thread1092824.html
Можете показать как будет выглядеть блок-схема для данного алгоритма.
C++ Перемножение неквадратных матриц с использованием динамического массива Программа не так считает итоговую матрицу (C=A*B). Наверно я что-то не понимаю ... #include <iostream> #include <conio.h> using namespace std; void Gen(int **A, int **B, int n, int m, int k); void Vivod(int **A, int **B, int n, int m, int k); void Multi(int **A, int **B,double **C, int n, int m, int k); подробнее

Показать сообщение отдельно
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 339
Записей в блоге: 2
10.02.2014, 02:27     Взаимный обмен значений указателей в параметрах функции
Ну так ему правильно не понравилось. Указатель
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;
    }
}
 
Текущее время: 12:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru