我有以下代码
#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;
受让人的值12
到age
该对象的-member,留下未初始化的结构(和所分配的存储器的其余部分)的其他成员。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句