Нужно через вызов функции создать объект структуры и вернуть его. Можно ли делать так, как ниже?
Person Person_init(char* name, double money) {
Person prs;
prs.name = name;
prs.money = money;
return prs;
}
или нужно через указатели?
Другие языки программирования и технологии
Си, структуры и функции
так можно. Но лучше не нужно, prs лишняя переменная.
через указатели можно например так:
struct Person {
char* name;
double money;
};
struct Person* Person_init(char* name, double money) {
struct Person* prs = (struct Person*)malloc(sizeof(struct Person));
prs->name = name;
prs->money = money;
return prs;
}
int main() {
char name[] = "myname";
struct Person* d;
d = Person_init(name, 3.5);
printf("%s %f", d->name, d->money);
free(d);
return 0;
}
через указатели можно например так:
struct Person {
char* name;
double money;
};
struct Person* Person_init(char* name, double money) {
struct Person* prs = (struct Person*)malloc(sizeof(struct Person));
prs->name = name;
prs->money = money;
return prs;
}
int main() {
char name[] = "myname";
struct Person* d;
d = Person_init(name, 3.5);
printf("%s %f", d->name, d->money);
free(d);
return 0;
}
выше хороший пример :) .
Еслиб ты создавал обьект размером с 4 байта (для 64-разрядного - 8 байт) - то разумно так. Посмотри ышяуща (название твоей стуктуры) - сколько весит.
У тебя возрашается (если сможет: ) содержимое структуры. Представь что она большая ?! Лишняя вставка на копирование этой кучи данных А если они ешо ссылаются на чтото внутри себя то усе. .
если ты переменную определил внутри функции, она может быть выделена в стеке который освободится по ее завершении. Ктото может писануть туда где она лежит. Поэтому вынеси переменую наружу ( в область глобальных переменых) и сможеш возврашать на нее указатель.
Или через ТУЦ тип переменой - вернет указатель. Его и возврашай.
В современых компилерах можно ставить методы. Например конструктор - имяструктуры в скобках параметры, в теле запись ее кишок по ним. Прям в описани структуры. В программе - после ТУЦ пишеш название структуры и параметры. Или при определении в коде надо также вызвать конструктор - скобки после имени переменой с параметрами в них.
Еслиб ты создавал обьект размером с 4 байта (для 64-разрядного - 8 байт) - то разумно так. Посмотри ышяуща (название твоей стуктуры) - сколько весит.
У тебя возрашается (если сможет: ) содержимое структуры. Представь что она большая ?! Лишняя вставка на копирование этой кучи данных А если они ешо ссылаются на чтото внутри себя то усе. .
если ты переменную определил внутри функции, она может быть выделена в стеке который освободится по ее завершении. Ктото может писануть туда где она лежит. Поэтому вынеси переменую наружу ( в область глобальных переменых) и сможеш возврашать на нее указатель.
Или через ТУЦ тип переменой - вернет указатель. Его и возврашай.
В современых компилерах можно ставить методы. Например конструктор - имяструктуры в скобках параметры, в теле запись ее кишок по ним. Прям в описани структуры. В программе - после ТУЦ пишеш название структуры и параметры. Или при определении в коде надо также вызвать конструктор - скобки после имени переменой с параметрами в них.
Похожие вопросы
- C++ структуры и функции
- Помогите написать программу на Си с помощью ФУНКЦИЙ.
- Реализация функций СИ
- Программирование на языке СИ с использованием подпрограммы-функции
- Помогите правильно построить функцию в Си
- Функции в языке СИ
- Си. функции
- Язык си, двухмерный массив и функция.
- Функции в Си
- Привет, помогите с программированием на СИ, передача массива в функцию..