【问题标题】:structures' memory type and sizeof tip结构的内存类型和大小
【发布时间】:2015-02-10 03:32:25
【问题描述】:

对于结构

struct school {
char*name;
int student;
int teacher;
int worker;
};

其实我有两个问题..

A) 是 x.y 和 x->y 语法的区别,即指针指向堆内存中的地址,其他语法处理堆栈 或者它不是真的,指针也可以在结构中用于指向堆栈中的地址,这两种语法之间实际上有什么区别?

B)当我尝试打印结构变量的大小时,它打印 24 而不是 20 可以解释吗?

【问题讨论】:

    标签: c memory struct


    【解决方案1】:

    A) 当x 是结构类型的变量时,使用x.y。当x 是指向结构类型的指针时使用x->y。它不必指向堆,它可以指向一个变量。所以如果你有:

    struct school school_var;
    struct school *school_ptr = &school_var;
    

    那么school_ptr->studentschool_var.student 相同。

    B) 变量可以有额外的填充,包含在sizeof 中。

    【讨论】:

    • 当我制作 struct school school_var;编译器现在将堆栈内存中所需的字节分配为 1 个 char* 和 3 个 int 变量及其名称(名称、学生、教师、工人),或者只是他处理像在堆内存中分配给我所需的空内存空间和我填充一个一个?
    • 它在堆栈中分配它。现在有人会过来指出,C 规范并没有说明堆栈,但它在概念上类似于堆栈,因为它会在函数返回时自动释放。
    • 所以栈中的分配和释放的过程不清楚吗?
    • C 语言只是指定了可观察的行为,它不需要任何特定的实现。堆栈是实现局部变量的最常用方式,但不是必需的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2021-06-04
    • 1970-01-01
    相关资源
    最近更新 更多