Ты за кого меня держиш!?
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
1

Передать функции структуру из массива структур или указатель на неё

22.01.2013, 19:37. Показов 2194. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
передать функции структуру из массива структур или указатель на неё в качестве параметра. покажите пример.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2013, 19:37
Ответы с готовыми решениями:

Передать указатель на структуру в параметре функции
Есть структура struct Test{ BYTE Size; BYTE* Mass; }; На чистом Си нужно передавать...

Написать структуру Book и функции сортировки массива таких структур
Ребят помогайте , нужно лабу сдать , выручите . Описать структуру . Заполнить данными массив из...

Как передать указатель на структуру?
Добрый день, господа. Прошу помощи сообщества по следующему вопросу. Срочно нужна помощь....

Возможно ли передать в функцию указатель на массив структур?
Ниже написан работающий код: #include <stdio.h> #include <wchar.h> #include <locale.h> #define...

6
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
22.01.2013, 23:41 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
 
typedef struct {
  double x, y, z;
} Vector;
 
// вычисление длины вектора по значению
double VectorLengthS(Vector);
// вычисление длины вектора по указателю
double VectorLengthP(Vector*);
 
int main(){
  Vector vectors[2] = {
    { 1.3, 4.1 },
    { 1.5, 3.0 }
  };
 
  // передача значения
  printf("%lf\n", VectorLengthS(vectors[0]));
  // передача указателя
  printf("%lf\n", VectorLengthP(&vectors[1]));
  // или printf("%lf\n", VectorLengthP(vectors + 1));
 
  return 0;
}
 
double VectorLengthS(Vector v){
  return sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
}
 
double VectorLengthP(Vector* v){
  return sqrt(v->x * v->x + v->y * v->y + v->z * v->z);
}
1
Ты за кого меня держиш!?
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
23.01.2013, 18:45  [ТС] 3
тут ещё влпрос созрел. Пытаясь передать по тому же принципу в callback функцию структуру, я столкнулся с категоричными заявлениями компилятора о моей некомпетентности.
Мож я что не так объявляю?

C
1
typedef char(*callback)(struct memory n);
Добавлено через 6 минут
Точнее я уверен что чтото не так объявляю. Вопрос только что?
0
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
23.01.2013, 19:28 4
наверное лишним является n
0
Ты за кого меня держиш!?
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
23.01.2013, 20:25  [ТС] 5
Может быть...
Прилагаю лог ошибок.
Кликните здесь для просмотра всего текста
gcc -Wall -c "Soma 2.c" (в каталоге: /home/aleksandr/Рабочий стол/Ubuntu One/Test)
Сборка завершилась с ошибкой.
Soma 2.c:23:32: предупреждение: декларация «struct memory» внутри списка параметров [по умолчанию включена]
Soma 2.c:23:32: предупреждение: область действия типа - только данная декларация или определение, что может не соответствовать вашим намерениям [по умолчанию включена]


Добавлено через 27 минут
И ещё там про параметр писано что он имеет неполный тип
0
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
24.01.2013, 03:28 6
вот этот код скомпилировался на ура:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
struct vector {
    double x, y;
} ;
 
typedef float(*funcPtr)( struct vector,  struct vector);
 
 
float function(funcPtr fun){
    struct vector v = {12, 5};
    struct vector u = {1, 8};
    return fun(v, u);
}
 
float multscalar( struct vector v,  struct vector u){
    return v.x * u.x + v.y * u.y;
}
 
int main() {
    printf("res: %f", function(multscalar));
    return 0;
}
Добавлено через 2 минуты
а вообще погуглите. в просторах интеренетов много инфы есть на счет указателей на функции.
1
Ты за кого меня держиш!?
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
24.01.2013, 08:49  [ТС] 7
Вообще я стараюсь писать после основательного гуглежа и просто перебора вариантов. И перебор мне показал во всех вариациях ошибки, по тому мне больше интересно что значат ети ошибки если предложенный тобою вариант правилен.

Добавлено через 4 минуты
Понял в чём ошибка была. typedef нужно было разместить после объявления структуры, только и всего.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2013, 08:49
Помогаю со студенческими работами здесь

Как передать указатель на структуру в функцию
Подскажите как передать указатель *arr на структуру в функцию2, чтобы в ней использовать уже...

C# Подскажите как правильно передать указатель на структуру в функцию
Здравствуйте, возникли проблемы с переходом из С в С#, к сожалению синтаксис C# знаю плохо и сразу...

Как передать в функцию указатель на структуру, если эта структура не определена глобально?
Проблема заключается в следующем: предположим есть некая структура, которая была определена внутри...

Как передать указатель на структуру так, чтобы потом иметь возможность корректно удалить его?
Есть класс в котором содержится указание на некоторую структуру данных. Этот указатель передается в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru