我对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个字符作为->
,而不是在变量名的前面加上(*
和).
。最后的结果是一样的。