С++ Функции - ПОМОГИТЕ!!!
Программер из меня не очень !(особенно под 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;
}
Может есть более приемлемый способ!?!
(Более чем уверен в этом)
Помогите , пожалуйста!!!
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;
}
Небольшой глюк - по-моему надо так!
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
Похоже я опять чего-то не понимаю!!!
Применяй передачу параметров по указателю:
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;
}
Теперь всё ОК!
P.S.:
я не собирался менять массивы местами.
Нужно было написать функцию (переносил код
Particle Engine под OpenGl из Delphi в C++ )
Просто чтобы не засорять людям мозги
(преобразования над векторами) упростил
постановку задачи - мне нужно было знать
о механизме работы функций и указателей
в С++ !!!
Ещё раз спасибо!!!
:D
...спасибо!!!
:D
Да незашта! :)
Всигда пажалуста! :)
void swap(float **a,float **b)
Использовать указатель на указатель хорошо, но можно ошибиться.... а ты ссылки использовать не пробовал???
Нельзя ли уточнить адрес?!?
http://www.ForumOM.km.ru/main.php
Мой IE пишет ,что сервак не найден!
(или опять у меня глюки!)
void fn(int& t1,int& t2)
{
t1=10;
t2=20;
}