C-带有why*符号的内存分配在前面和后面



我对C很陌生,我知道*是一个指针。

Person * father = (Person *) malloc(sizeof(Person));
Marriage * marriage = (Marriage *) malloc(sizeof(Marriage));
(* marriage).male = father;

我的问题是,为什么*有时出现在前面,有时出现在后面?这是什么原因?

Person *是指向Person类型的指针
(Person *)是指向Person类型指针的C类型强制转换(如果您不熟悉类型强制转换,请阅读)
(* marriage)正在取消引用婚姻指针,这基本上是访问存储在指针指向的内存位置中的变量。还有一个提示,由于婚姻看起来是一个指向结构的指针,并且您正在访问该结构的一个成员,因此可以避免使用(*marriage).male语法,并使用->运算符,如marriage->male

因此,原始代码为:

Person * father = (Person *) malloc(sizeof(Person));
Marriage * marriage = (Marriage *) malloc(sizeof(Marriage));

1) 让在的每一行上放置类型和变量之间的显式边界

(Person *) father = (Person *) malloc(sizeof(Person));
(Marriage *) marriage = (Marriage *) malloc(sizeof(Marriage));

你看到了吗?所以,这里我们有一个带星号的类型,它告诉编译器"嘿,这家伙是一个指向类型的指针"。我们在右侧使用相同的类型将非常通用的(void*)转换为精确的类型。

2) 是时候使用我们分配的东西了。我可以说,由于语法过多(这肯定会让你感到困惑),你的原始版本并没有那么广泛地传播:

(* marriage).male = father;

更可取的方式是说以下内容:

marriage->male = father;

仅使用2个字符作为->,而不是在变量名的前面加上(*).。最后的结果是一样的。

相关内容

  • 没有找到相关文章

最新更新