函数如何创建结构?

时间:2015-04-22 17:12:25

标签: c struct

我对C编程课程的一个任务是定义一个名为create_card的函数。此函数接收套装字符和卡值,并返回card_t结构。

问题:函数如何创建结构?它不能只为结构创建值吗?我是否误解了问题的含义,还是写错了作业?

2 个答案:

答案 0 :(得分:4)

这是返回结构的函数的示例。

struct test {
    int a;
};
struct test Fun(int k) {
    struct test d;
    d.a=k;
    return d;
}

使用结构的定义将struct test替换为结构名称和struct test的定义。

如何使用

int main() {
    struct test Test=Fun(6);
    printf("%d",Test.a); // prints '6'
    return 0;
}

答案 1 :(得分:-1)

您可以<{3}}中的某个功能返回 {/ 1}},也可以<{>创建 struct { {3}}(也就是堆),使用struct,并返回指向它的指针,例如

malloc

您的struct foo_st { int num; const char* str; }; struct foo_st* /* the second argument s should practically be a literal string */ make_foo (int n, const char* s) { struct foo_st* p = malloc(sizeof(struct foo_st)); if (!p) { perror("malloc foo"); exit(EXIT_FAILURE); }; p->num = n; p->str = s; return p; } (或其他某项功能)可能会稍后执行main,但有人应该致电struct foo_st*fooptr = make_foo(32, "abc");(或至少free(fooptr)来自free的地址fooptr 1}})。

当然,当它变得无用时,你永远不应忘记free malloc - ed指针。要害怕ForceBru's answerC dynamic memorymemory leaks。详细了解buffer overflow&amp; free

顺便说一下,实际上你应该决定谁负责free - 记忆。在上面的make_foo示例中,make_foo的第二个参数应该是文字字符串(如果是malloc - 例如使用undefined behavior,则需要free它在其他地方,而且变得非常混乱。)

在实践中,您应该记录谁负责free 以前动态malloc内存的约定。您可能希望使用malloc(3)(如果您的系统具有它),并且,如果使用最近的strdup(3)编译器,则使用valgrind来捕获与内存相关的错误。很多时候,您碰巧编写了制作和销毁函数的代码(例如GCC-fsanitize=address option)。

您可能希望阅读here(至少,了解here等概念和术语)。也许您以后想要使用garbage collection