【问题标题】:Learning dynamic memory allocation学习动态内存分配
【发布时间】:2019-04-28 08:04:38
【问题描述】:

我是一名学生,我尝试自学代码。 我的问题:

我有两个结构:

struct1{
int a;
char name[20];}

struct 2{
struct struct1 *objekt;
int number;
double dNumber;}

我想动态分配内存以创建至少一个新的 Objekt(因为没有更好的词)。例如,我知道我可以使用 malloc 或 calloc 分配内存。这很好。但是如何在不定义新结构的情况下通过控制台输入动态添加新对象?我是一个完全的新手,很抱歉。谢谢。

【问题讨论】:

  • 你需要多学习。如果我们回答这个问题,您将在 5 分钟后回来询问如何添加两个数字;)
  • 我明白了。你知道我该怎么做吗?
  • @HerroPhong 我的建议是买一本好的 C 书并从那里开始。你不是从试错中学习 C 的。
  • 你好@Broman 你有什么建议吗?

标签: c dynamic-memory-allocation


【解决方案1】:

考虑以下示例:

#include <stdio.h>
#include <stdlib.h>

struct Struct {
    int a;
    char name[20];
};

struct Struct struct1;

int main()
{
    struct Struct *struct1_p;
    struct1_p = &struct1;
    struct1.a = 1; 
    printf("struct1->a = %d\n", struct1_p->a);
    // Now let's create new structure dynamically
    struct Struct * struct2 =  malloc(sizeof(struct Struct));
    // Now check if the allocation succeeded?
    if(struct2 != NULL) { 
        //Success
        //struct2 now is a pointer to the memory which is reserved for struct2. 
        struct2->a = 2;
    } else {
        // Allocation failed
    }
    printf("struct2->a = %d\n", struct2->a);


    return 0;
}

这样,有了所需对象的类型,您就可以在内存中动态创建新对象。通过malloc 返回的指针访问新创建的对象。 请记住,malloc 返回 void*,无需显式转换。

【讨论】:

  • It's better not to cast the result of malloc。显式转换 void * 指针几乎没有意义。
  • @Hairi 这很有帮助,并增加了我的理解。非常感谢。
  • @KamilCuk 我认为你是对的。虽然我已经多次看过明确的演员表。我不知道他们为什么要这么做。我改变了答案。
  • @HerroPhong 很高兴能帮到你。
  • @HerroPhong 如果您觉得满意,可以检查为正确答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 2013-07-01
相关资源
最近更新 更多