void Replace(int* a, int* b)
{
*a += *b;
*b = *a - *b;
*a -= *b;
}
Наипростейшая задача
void Replace(int* a, int* b)
{
int* temp=a;
a=b;
b=temp;
}
Вот с ссылками два раза плюнуть!!
Собственно вопрос: функции отправляются только адреса, а как сделать чтобы она возвращала значения типа int (а может не возвращала, подобно сслыкам)
P.S. Посоветуйте какие-нибудь статьи по указателям и ссылкам, а то в других языках их нет и по Страспупу как-то несовсем...
{
int temp=*a;
*a=*b;
*b=temp;
}
вот так
Код:
P.S. очень странно, что по Страуструпу не совсем...
Цитата:
Бьерн Страуструп " Язык программирования С++"
...
Параметры функции могут передаваться либо "по значению", либо "по
ссылке". Рассмотрим определение функции, которая осуществляет взаимообмен
значений двух целых переменных. Если используется стандартный способ
передачи параметров по значению, то придется передавать указатели:
Унарная операция * называется косвенностью (или операцией
разыменования), она выбирает значение объекта, на который настроен
указатель. Функцию можно вызывать следующим образом:
...
...
Параметры функции могут передаваться либо "по значению", либо "по
ссылке". Рассмотрим определение функции, которая осуществляет взаимообмен
значений двух целых переменных. Если используется стандартный способ
передачи параметров по значению, то придется передавать указатели:
Код:
void swap ( int * p, int * q )
{
int t = * p;
* p = * q;
* q = t;
}
{
int t = * p;
* p = * q;
* q = t;
}
Унарная операция * называется косвенностью (или операцией
разыменования), она выбирает значение объекта, на который настроен
указатель. Функцию можно вызывать следующим образом:
Код:
void f ( int i, int j )
{
swap ( & i, & j );
}
{
swap ( & i, & j );
}
Код:
#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;
}
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
:???:
Цитата:
Originally posted by Russish
Этот алгоритм меняет, согласен, но почему тогда выводит следующее :
5435 222
222 5435
:???:
Код:
#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;
}
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
Цитата:
Originally posted by squirL
гы... а у меня эта самая программа выдает
5435 5435
5435 5435
кто нибудь объяснит? :) компилятор g++ 3.3.5
гы... а у меня эта самая программа выдает
5435 5435
5435 5435
кто нибудь объяснит? :) компилятор g++ 3.3.5
Нужно писать
int temp=*a;
*a=*b;
*b=temp;
Цитата:
Originally posted by Russish
Этот алгоритм меняет, согласен, но почему тогда выводит следующее :
5435 222
222 5435
:???:
Код:
#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;
}
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;
}
;)