Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача указателя на массив структур в функцию 
V
    Опции темы
oshilan
Дата 9.5.2010, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 21.3.2010

Репутация: нет
Всего: 0



В функции sort первым параметром является указатель на массив (X *work). Функция спокойно принимает указатель на обычный массив:
Код
int array[7]={7,5,4,3,9,8,6};  //обычный массив
sort(array, 7);  //передача в функцию указатель на массив и кол-во элементов

Но как мне устроить указатель на массив структур (например, чтоб передавался указатель на массив из полей year, что в структуре)?
В этой программе применяется шаблон функции, но всё работало нормально с обычным массивом, так что обращать на него внимание не следует (он взят с учебника Шилдта).
Программа, которую написал я с указанием ошибок компиляции в комментариях:
Код
#include<iostream>
using namespace std;

struct employee
{ char name[10];
  int year;
  float salary;
} worker[10];

int input()
{ int count;
  cout<<"Enter count of workers: ";
  cin>>count;
  for(int i=0; i<count; i++)
  { cout<<'\n'<<i+1<<"-st worker:\n";
    cout<<"Name: "; cin>>worker[i].name;
    cout<<"Year: "; cin>>worker[i].year;
    cout<<"Salary: "; cin>>worker[i].salary;
  }
  return count;
}

template <class X> void sort(X *work, int count)
{ int a, b;
  X t;
  for(a=1; a<count; a++)
    for(b=count-1; b>=a; b--)
    if(work[b-1] > work[b])
    { t=work[b-1];
      work[b-1] = work[b];
      work[b]=t;
    }
}

int main()
{ system("cls");
  int count=input();
  sort(worker.year, count);      //Error: выражение слева от ".year" должно представлять класс, структуру или объединение
  sort(worker.salary, count);    //Error: выражение слева от ".salary" должно представлять класс, структуру или объединение
  system("pause");
}

Зараннее спасибо!
PM MAIL   Вверх
toxx
Дата 9.5.2010, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



У тебя передаётся массив, значит ты должен поля year,salary записать сначала в массив, а уж потом передавать его на сортировку.
PM MAIL   Вверх
oshilan
Дата 9.5.2010, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 21.3.2010

Репутация: нет
Всего: 0



Тогда, получается, нужно создать три массива, соответствующие полям структуры, и с ними работать, а о структуре просто забыть?

Это сообщение отредактировал(а) oshilan - 9.5.2010, 23:32
PM MAIL   Вверх
toxx
Дата 9.5.2010, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



Цитата

Тогда, получается, нужно создать три массива, соответствующие полям структуры, и с ними работать, а о структуре просто забыть :( 

Ну можно и не забывать, ты можешь объявить массив указателей на рабочих, и потом по определенным полям сортировать структуры

Код

void sort(worker *work, int count)
{ int a, b;
  X t;
  for(a=1; a<count; a++)
    for(b=count-1; b>=a; b--)
    if(work[b-1]->salary > work[b]->salary)
    { t=work[b-1];
      work[b-1] = work[b];
      work[b]=t;
    }
}

но менять местами структуры таким образом нельзя
Код

t=work[b-1];
 work[b-1] = work[b];
work[b]=t;

PM MAIL   Вверх
oshilan
Дата 9.5.2010, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 21.3.2010

Репутация: нет
Всего: 0



Спасибо, я понял ;)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0704 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.