Я должен создать структуру в функции (динамично с malloc) Затем, я должен смочь отправить его в свое основное, и использовать его там. У меня нет проблем при создании его, я просто нуждаюсь в помощи, отправляя его в мое основное, и я также не уверен в том, как получить доступ к нему, после того как я получаю его там.
struct retValue * fn() {
struct retValue
{
int number;
};
struct retValue* st = malloc(sizeof(*st));
return(???);
}
Это - код, который я имею до сих пор.
Спасибо за любую справку. Сообщите мне, нужно ли Вам что-то разъясненное.
Править:
Хорошо Некоторое разъяснение необходимо.
То, чего я пытаюсь достигнуть, является способностью передать структуру через функцию к моему основному. В функции я должен объявить переменные и присвоить им значения. Затем в основном я должен распечатать каждую переменную структуры на экран. Никакие глобальные переменные не могут использоваться (и таким образом я не принимаю глобальных структур).
Надо надеяться, это разъясняет вещи.
РЕДАКТИРОВАНИЕ 2:
Я выяснил свою проблему. Для заинтересованных, у меня должен был быть прототип структуры за пределами моих функций сначала. Затем я мог передать Св. и затем получить доступ к нему правильно. Благодаря всем, и жаль о плохой формулировке.
// make the structure def global so that main() and fun() know about it.
struct retValue {
int number;
};
// function fn returns a pointer to the structure retValue
struct retValue * fn() {
struct retValue* st = malloc(sizeof(*st));
// return the pointer to the newly allocated structure.
return(st);
}
int main() {
// call fn() to create a new structure dynamically.
struct retValue *st = fn();
}
Это можно сделать следующим образом
mylist = ['a', 'b', 'c', 'd', 'e']
myorder = [3, 2, 0, 1, 4]
mylist = [mylist[i] for i in myorder]
print(mylist) # prints: ['d', 'c', 'a', 'b', 'e']
-121--789206- >>> import random
>>> x = [1,2,3,4,5]
>>> random.shuffle(x)
>>> x
[5, 2, 4, 3, 1]
-121--789207- Вы получите сотни ответов на этот вопрос.:)
Вы можете вернуть указатель напрямую. Например, return st
, Ваша основная функция сможет получить доступ к членам структуры, как в st- > number
. Убедитесь, что основной свободный
указатель по завершении.
Это не обязательно отличный дизайн образца. Вызываемый абонент (fn) выделяет память, но вызывающий абонент (основной) должен справиться с последствиями. Это также можно структурировать с помощью основного выделения памяти (с использованием malloc или непосредственно на стеке) и передачи указателя для использования fn. Затем malloc/free происходит в том же месте. В противном случае необходимо точно назвать функцию fn как allocateMyStructure
, чтобы было ясно, что возврат должен быть освобожден.
P.S. Я не уверен в правилах определения структур внутри функции, но вы не должны делать это здесь. Объявите struct retValue над основной и вашей функцией fn, чтобы они оба могли «видеть» объявленный тип.
Одна вещь, которую я хотел бы указать ... поскольку структура локальная к функции, есть ли глобальная структура, которая точно соответствует, что иначе вы можете столкнуться с проблемами, как бы Главная ()
знать, что в этой структуре? Можете ли вы уточнить?
Редактировать: Кажется, мой ответ подтвердил то, что я подумал.
struct retValue { int number; }; int main(int argc, char **argv){ struct retValue *ptr; ptr = fn(); /* do what you have to do... */ .... return 0; } struct retValue * fn() { struct retValue* st = malloc(sizeof *st); /* do you work on the structure */ st->number = 5; return st; }
Кстати кто-то размещен Это ранее сегодня.
Надеюсь, это поможет, С наилучшими пожеланиями, Том.
Пожалуйста, объявите структуру в общем файле заголовка и включите его в исходный файл, а затем вернуть ST из текущей функции. Это должно работать.
struct retValue { int number; };
int main(...) {
struct retValue *myval;
myval = fn();
}
struct retValue *fn() {
struct retValue* st = malloc(sizeof(*st));
return st;
}