The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"массив структур как параметр функции"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"массив структур как параметр функции"
Сообщение от grserg emailИскать по авторуВ закладки on 11-Июн-03, 00:33  (MSK)
вопрос легкий, но все же...
порблема с передачей массива структур в функцию ...
дело такое :
struct s_us {
     char *s_name;
     int s_num;
      ...
}
      ...
struct s_us*gets_us(struct s_us*, int){
      ...
      return s_us;
}

void main(){
    struct s_us s_usarr[20];
    ....
    s_usarr = gets_us(s_usarr,5);
    ...
}

вот ... кричит , что :
warning: return from incompatible pointer type ,  проблема с возвращением значения из функции...
Вот собственно все...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "массив структур как параметр функции"
Сообщение от Olej emailИскать по авторуВ закладки on 11-Июн-03, 11:47  (MSK)
>вопрос легкий, но все же...

Конечно, вот здесь:

>struct s_us*gets_us(struct s_us*, int){
>      ...
>      return s_us;
>}

- объявляется возврат указателя на структуру, а возвращается - структура (в стеке?) - как говорят в Одессе: "Обещать жениться и жениться - это 2 большие разные вещи...", ... да ещё и путаница имён типа с именами переменных - это возможно, но хорошо не заканчивается...

>вот ... кричит , что :
>warning: return from incompatible pointer type ,  проблема с возвращением значения из функции...

Кричит "warning" - но возвращать будет полную херню...


  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "массив структур как параметр функции"
Сообщение от yegor emailИскать по авторуВ закладки on 15-Июн-03, 20:25  (MSK)
Мне вообще кажется , что пример использованный для описания данной проблемы является не корректным . Например не понятно , что такое

return s_us;

Или внутри функции была обьявлена переменная с именем s_us ( не плохо бы было знать ее тип ) или товарищ сделал Copy/Paste не из того места и на самом деле определение выглядит так :

struct s_us*gets_us(struct s_us* s_us, int a){
      ...
      return s_us;
}

Тогда проблема не в этом месте .

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "массив структур как параметр функции"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 11-Июн-03, 13:00  (MSK)
Структура и указатель на структуру - разные вещи.
Вот, как я считаю, правильный код (извините за некоторые возможные ошибки, я не проверял его)

#include <stdlib.h>
#include <string.h>

struct st {
int st_int;
double st_double;
};

struct st* init_st(struct st *mst)
{
if (!mst && !(mst = (struct st *)malloc(sizeof(struct st))))
return (NULL);

(void)memset(mst, 0, sizeof(struct st));
}

int main(void)
{
struct st test;
struct st *pointer;

pointer = init_st(&test);
}

либо так:

int main(void)
{
struct st *test = init_st(NULL);
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "массив структур как параметр функции"
Сообщение от yegor emailИскать по авторуВ закладки on 15-Июн-03, 19:58  (MSK)
По-моему проблема о которой задан вопрос содержится в строке :

....
    s_usarr = gets_us(s_usarr,5);
...

Хотя имя массива и является указателем ( на первый элемент ) , но это не значит что его позволяется переопределять . Иначе было бы не понятно , что делать с распределенной на этапе компиляции памятью .

На мой взгляд надо было бы написать следующее :


    struct s_us s_usarr[20] , *s_ptr;
    ....
    s_ptr = gets_us(s_usarr,5);

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру