指向结构的指针

语义学

我有以下代码

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

typedef struct {
    int age;
} data;

int storage (data **str) {
    *str = malloc(4 * sizeof(**str));
    (*str)[0].age = 12;
    return 0;
}

int main() {
    data *variable = NULL;
    storage(&variable);
    return 0;
}

我是从网站上获取的。我认为我对基本的指向指针概念的指针有误解,因为在此代码中,我们有一个指向struct的指针variable,并将其传递给storage函数,该函数期望指向struct类型的指针。分配内存后,我不了解此分配

(*str)[0].age = 12

它被分配为好像str(*)[]类型。我不明白这种分配str如何工作的,就像现在是指向结构数组的指针一样

紧急行动

首先,有关用于解引用指针的C语法的说明:

a[b]等同于*(a + b),等同于*(b + a),等同于b[a]

现在,在

int main() {
    data *variable = NULL;
    storage(&variable);
    return 0;
}

variable的类型为“指向”的指针data,因此其地址&variable的类型为“指向”的指针data这将传递给int storage(data **str),并且是参数的正确类型str

int storage (data **str) {
    *str = malloc(4 * sizeof(**str));
    (*str)[0].age = 12;
    return 0;
}

在这里,str被取消引用,产生一个类型data *为与main()s相同的对象的左值variable由于它是一个左值,因此可以分配给它。

malloc()分配没有声明类型的内存,该内存足够大(并且足够对齐)以包含四个连续的type对象data它返回一个指向分配开始的指针。

(*str)[0]现在是一个左值,指定类型的对象data,并且通过访问malloc()通过此表达式分配的内存,该内存有效类型变为data(*str)[0].age = 12;受让人的值12age该对象的-member,留下未初始化的结构(和所分配的存储器的其余部分)的其他成员。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章