Re: Возврат структуры из функции на СИ
От: Аноним  
Дата: 11.08.07 12:49
Оценка: 3 (1) :))
Здравствуйте, AlexBosen, Вы писали:

AB>Подскажите пожалуйста новичку, как на СИ возвратить структуру из функции


AB>Имеем структуру:


AB>
AB>struct myStruct
AB>{
AB>     UINT16 Param1;
AB>     UINT16 Param2;
AB>};
AB>


AB>Имеем функцию:


AB>
AB>VOID??? myFunc()
AB>{
AB>     struct myStruct *myStruct;

AB>     myStruct->Param1 = 10;
AB>     myStruct->Param2 = 20;
     
AB>     // Как сдесь написать return что бы вернуть структуру myStruct ????? Подскажите новичку пожалуйста

AB>     return ???????????;
AB>};
AB>


AB>По форуму искал но так и ничего толком не понял, можно ожалуйста наглядный пример, большое спасибо


В вашем случае
void* myFunc()
{
     struct myStruct *myStruct;
     myStruct->Param1 = 10;
     myStruct->Param2 = 20;
     return ( (void*)(myStruct) );
};

но это не совсем красиво
ИМХО лучше так:

// ...
myStruct *pStruct = new myStruct;
myFunc( *pStruct );
// ...

void myFunc(myStruct& aStruct)
{
     aStruct.Param1 = 10;
     aStruct.Param2 = 20;
};
Re: Возврат структуры из функции на СИ
От: Аноним  
Дата: 11.08.07 12:52
Оценка: 6 (2)
Здравствуйте, AlexBosen, Вы писали:

AB>Подскажите пожалуйста новичку, как на СИ возвратить структуру из функции


AB>Имеем структуру:


AB>
AB>struct myStruct
AB>{
AB>     UINT16 Param1;
AB>     UINT16 Param2;
AB>};
AB>


AB>Имеем функцию:


AB>
AB>VOID??? myFunc()
AB>{
AB>     struct myStruct *myStruct;

AB>     myStruct->Param1 = 10;
AB>     myStruct->Param2 = 20;

Так нельзя. Для структуры надо выделить память
1. статически
struct myStruct s;

2. либо динамически
struct myStruct* ps = (myStruct*)malloc(sizeof(myStruct));

Во втором случае не забудь освободить память (free(...)).

     
AB>     // Как сдесь написать return что бы вернуть структуру myStruct ????? Подскажите новичку пожалуйста

AB>     return ???????????;
AB>};
AB>

1.
struct myStruct myFunc()
{
...
}

2.
struct myStruct* myFunc()
{
...
}


AB>По форуму искал но так и ничего толком не понял, можно ожалуйста наглядный пример, большое спасибо
Re[3]: Возврат структуры из функции на СИ
От: Аноним  
Дата: 11.08.07 13:06
Оценка: 3 (2)
Здравствуйте, Awaken, Вы писали:

А>>myStruct *pStruct = new myStruct;


A>забыли вы Си совсем

A>в C нет new/delete. по значению тоже не передашь т.к. нет конструкторов копирования
Чего? Comeau в режиме С99 компилит нормально.
Re[3]: Возврат структуры из функции на СИ
От: Аноним  
Дата: 11.08.07 13:10
Оценка: 3 (1)
Здравствуйте, Awaken, Вы писали:

А>>myStruct *pStruct = new myStruct;


A>забыли вы Си совсем

A>в C нет new/delete. по значению тоже не передашь т.к. нет конструкторов копирования
A>единственный вариант тут это calloc/malloс . или объявить ее глобальной переменной

Все правильно, это ++ вариант.
плюсы съели остатки моего мозга
Re[2]: Возврат структуры из функции на СИ
От: Awaken Украина  
Дата: 11.08.07 12:56
Оценка: 2 (1)
А>myStruct *pStruct = new myStruct;

забыли вы Си совсем
в C нет new/delete. по значению тоже не передашь т.к. нет конструкторов копирования
единственный вариант тут это calloc/malloс . или объявить ее глобальной переменной
Возврат структуры из функции на СИ
От: AlexBosen  
Дата: 11.08.07 12:35
Оценка:
Подскажите пожалуйста новичку, как на СИ возвратить структуру из функции

Имеем структуру:

struct myStruct
{
     UINT16 Param1;
     UINT16 Param2;
};


Имеем функцию:

VOID??? myFunc()
{
     struct myStruct *myStruct;

     myStruct->Param1 = 10;
     myStruct->Param2 = 20;
     
     // Как сдесь написать return что бы вернуть структуру myStruct ????? Подскажите новичку пожалуйста

     return ???????????;
};


По форуму искал но так и ничего толком не понял, можно ожалуйста наглядный пример, большое спасибо
Re: Возврат структуры из функции на СИ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.08.07 12:45
Оценка:
Мжет лучше еще раз перечитать книжку по С ?
Столько ошибок в одной тривиальной функции я еще не видел.
Re[2]: Возврат структуры из функции на СИ
От: AlexBosen  
Дата: 11.08.07 12:52
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Мжет лучше еще раз перечитать книжку по С ?

G>Столько ошибок в одной тривиальной функции я еще не видел.

Спасибо за совет, но я же новичек и только учусь
Re[4]: Возврат структуры из функции на СИ
От: Awaken Украина  
Дата: 11.08.07 14:09
Оценка:
А>Чего? Comeau в режиме С99 компилит нормально.

за С99 не слежу... ты прав, там это стало стандартной фичей.
Re[5]: Возврат структуры из функции на СИ
От: Аноним  
Дата: 11.08.07 14:29
Оценка:
Здравствуйте, Awaken, Вы писали:

А>>Чего? Comeau в режиме С99 компилит нормально.


A>за С99 не слежу... ты прав, там это стало стандартной фичей.

А какой Си Вы имели в виду? С89/С90 тоже поддерживает передачу и возврат структур по значению. Разве в K&R C было по другому?
Re[2]: Возврат структуры из функции на СИ
От: AlexBosen  
Дата: 11.08.07 14:55
Оценка:
Здравствуйте, Аноним, Вы писали:


struct myStruct s;

struct myStruct myFunc()
{
...
}


Огромное спасибо Все получилось!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.