Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Наипростейшая задача

11K
28 августа 2005 года
Russish
6 / / 25.07.2005
Собственно нужно написать функцию, которая меняет значения двух переменных (/*a=2;b=3;<>b=2;a=3*/) и нужно, чтобы входные параметры были только int* :!!!:

void Replace(int* a, int* b)
{
int* temp=a;
a=b;
b=temp;
}


Вот с ссылками два раза плюнуть!!
Собственно вопрос: функции отправляются только адреса, а как сделать чтобы она возвращала значения типа int (а может не возвращала, подобно сслыкам)

P.S. Посоветуйте какие-нибудь статьи по указателям и ссылкам, а то в других языках их нет и по Страспупу как-то несовсем...
247
28 августа 2005 года
wanja
1.2K / / 03.02.2003
void Replace(int* a, int* b)
{
int temp=*a;
*a=*b;
*b=temp;
}
вот так
11K
28 августа 2005 года
dosER
17 / / 04.07.2005
 
Код:
void Replace(int* a, int* b)
{
    *a += *b;
    *b = *a - *b;
    *a -= *b;
}
:)
P.S. очень странно, что по Страуструпу не совсем...

Цитата:
Бьерн Страуструп " Язык программирования С++"
...
Параметры функции могут передаваться либо "по значению", либо "по
ссылке". Рассмотрим определение функции, которая осуществляет взаимообмен
значений двух целых переменных. Если используется стандартный способ
передачи параметров по значению, то придется передавать указатели:
 
Код:
void swap ( int * p, int * q )
         {
           int t = * p;
           * p = * q;
           * q = t;
         }

Унарная операция * называется косвенностью (или операцией
разыменования), она выбирает значение объекта, на который настроен
указатель. Функцию можно вызывать следующим образом:
 
Код:
void f ( int i, int j )
         {
           swap ( & i, & j );
         }
...

11K
29 августа 2005 года
Russish
6 / / 25.07.2005
Код:
#include <iostream>

void Replace (int* a,int* b)
{
   int* temp=a;
   *a=*b;
   *b=*temp;
   std::cout << *a << "   " << *b << std::endl;
}

void main()
{
   int AA=222;
   int BB=5435;
   Replace(&AA,&BB);
   std::cout << AA << "  " << BB << std::endl;
}


Этот алгоритм меняет, согласен, но почему тогда выводит следующее :
5435 222
222 5435
:???:
2
29 августа 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Russish
Код:
#include <iostream>

void Replace (int* a,int* b)
{
   int* temp=a;
   *a=*b;
   *b=*temp;
   std::cout << *a << "   " << *b << std::endl;
}

void main()
{
   int AA=222;
   int BB=5435;
   Replace(&AA,&BB);
   std::cout << AA << "  " << BB << std::endl;
}


Этот алгоритм меняет, согласен, но почему тогда выводит следующее :
5435 222
222 5435
:???:



гы... а у меня эта самая программа выдает
5435 5435
5435 5435
кто нибудь объяснит? :) компилятор g++ 3.3.5

488
29 августа 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by squirL
гы... а у меня эта самая программа выдает
5435 5435
5435 5435
кто нибудь объяснит? :) компилятор g++ 3.3.5

Нужно писать
int temp=*a;
*a=*b;
*b=temp;

406
29 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by Russish
Код:
#include <iostream>

void Replace (int* a,int* b)
{
   int* temp=a;
   *a=*b;
   *b=*temp;
   std::cout << *a << "   " << *b << std::endl;
}

void main()
{
   int AA=222;
   int BB=5435;
   Replace(&AA,&BB);
   std::cout << AA << "  " << BB << std::endl;
}


Этот алгоритм меняет, согласен, но почему тогда выводит следующее :
5435 222
222 5435
:???:



Данный алгоритм будет выводить
5435 5435
5435 5435
А обяснение следующее:
void Replace (int* a,int* b)
{
int* temp=a;//берем указатель на a
*a=*b;//присваеваем число переменной a
*b=*temp;//так как temp это указатель на а то соответсвенно он сейчас содержит то что было в b так как мы выполнили *a=*b,и поэтому b присваеваем
свое же значение что у него и было!
std::cout << *a << " " << *b << std::endl;
}

11K
29 августа 2005 года
dosER
17 / / 04.07.2005
если ты, автор темы, внимательно посмотришь на пример, который привел я, и на пример из Страуструпа, ты все поймешь.
;)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог