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

Ваш аккаунт

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

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

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

С++ Функции - ПОМОГИТЕ!!!

724
04 ноября 2002 года
_anton
100 / / 04.11.2002
Пожалуйста ! Помогите!
Программер из меня не очень !(особенно под VС++)

void swap(float a[], float b[]) {
float **temp;
*temp = a;
a = b;
b = *temp;
}

Простенькая пользовательская функция!
Меняет содержимое массивов!
Наткнулся я на проблему : если применить
return - то это только одну переменную
можно вернуть в основную программу.
Если применить глобальные переменные , то
получится вот как , но немного глупо:

#include <iostream.h>
#include <conio.h>

float *a1; float *a2;

void swap(float a[], float b[]) {
float **temp;
*temp = a;
a = b;
b = *temp;
cout << a[1] << b[1] << "\n";
a1 = a;
a2 = b;
}

//vivod
void vivod(float a[3]){
int i;
for (i=0;i<3;i++) cout << a;
}
//main
main ( void ) {
int i;
a1 = new float[3];
for (i=0;i<3;i++) a1=i+1;
a2 = new float[3];
for (i=0;i<3;i++) a2=i+4;

swap(a1,a2);

vivod(a1);
vivod(a2);
delete a1;
delete a2;
while(!kbhit()){};
return 0;
}

Может есть более приемлемый способ!?!
(Более чем уверен в этом)
Помогите , пожалуйста!!!
831
04 ноября 2002 года
S_T
117 / / 23.10.2002
Цитата:
Originally posted by _anton

Skipped...



Применяй передачу параметров по указателю:

#include <stdio.h>

void swap(float **a,float **b)
{
float *temp;
temp=a;
a=b;
b=temp;
}
void main()
{
int i;
float *a1,*a2;
a1=new float[3];
a2=new float[3];

a1[0]=1;
a1[1]=2;
a1[2]=3;
a2[0]=4;
a2[1]=5;
a2[2]=6;
swap(&a1,&a2);
for(i=0;i<3;i++) printf("%f ",a1);
printf("\n");
for(i=0;i<3;i++) printf("%f ",a2);
delete [] a1;
delete [] a2;
}

724
04 ноября 2002 года
_anton
100 / / 04.11.2002
Спасибо вам за ответ!!!
Небольшой глюк - по-моему надо так!

void swap(float **a,float **b)
{
float *temp;
temp=*a; а не temp=a иначе ошибка!!!
a=b;
*b=temp; a не b=temp иначе ошибка!!!
}

И почему-то выдаёт
1 2 3
1 2 3
А не
4 5 6
1 2 3
Похоже я опять чего-то не понимаю!!!
380
04 ноября 2002 года
Arestov
285 / / 20.09.2000
Цитата:
Originally posted by S_T


Применяй передачу параметров по указателю:
void swap(float **a,float **b)
{
float *temp;
temp=a;
a=b;
b=temp;
}



так swap работать не будет!

я не понимаю что значит поменять массивы??? есть два массива, зачем их менять, да и ищё в атдельной ф-ции???

void PrintArray(char*pszName, float *p, int num_items)
{
printf ("array \"%s\": ", pszName);

for(int i=0; i<num_items; i++)
printf (" %.2f", p);

printf ("\n");
}

int main(int argc, char*argv[])
{
float a1[] = {0.1f,0.2f,0.3f};
float a2[] = {0.4f,0.5f,0.6f};
const int num_items = sizeof(a1)/sizeof(a1[0]);
// sizeof на массивы полученные из new НЕ РАБОТАЕТ!!!

PrintArray("a1", a1, num_items);
PrintArray("a2", a2, num_items);

float *p = a1;
PrintArray("p", p, num_items);

p = a2;
PrintArray("p", p, num_items);

}

Удачи!

P.S а swap() от S_T нада исправить так:
void swap(float **a, float **b)
{
float *temp;
temp=*a;
*a=*b;
*b=temp;
}

724
04 ноября 2002 года
_anton
100 / / 04.11.2002
Огромное Спасибо Игорь!
Теперь всё ОК!

P.S.:
я не собирался менять массивы местами.
Нужно было написать функцию (переносил код
Particle Engine под OpenGl из Delphi в C++ )
Просто чтобы не засорять людям мозги
(преобразования над векторами) упростил
постановку задачи - мне нужно было знать
о механизме работы функций и указателей
в С++ !!!
Ещё раз спасибо!!!
:D
380
04 ноября 2002 года
Arestov
285 / / 20.09.2000
Цитата:
Originally posted by _anton
...спасибо!!!
:D



Да незашта! :)
Всигда пажалуста! :)

379
07 ноября 2002 года
Fima
109 / / 07.11.2002
_anton
void swap(float **a,float **b)
Использовать указатель на указатель хорошо, но можно ошибиться.... а ты ссылки использовать не пробовал???
724
10 ноября 2002 года
_anton
100 / / 04.11.2002
Fima!

Нельзя ли уточнить адрес?!?

http://www.ForumOM.km.ru/main.php

Мой IE пишет ,что сервак не найден!
(или опять у меня глюки!)
409
16 ноября 2002 года
Ramzes
163 / / 20.09.2000
если надо вернуть больше одного значения:

void fn(int& t1,int& t2)
{
t1=10;
t2=20;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог