【发布时间】:2020-06-27 19:02:19
【问题描述】:
前段时间我有一个学校项目,当时我正在学习 C,但现在已经有一段时间无法如此轻松地理解指针了。代码如下:
typedef struct {
Identification id;
Ring edge;
Ring *holes;
in nHoles;
} Parcel;
typedef Parcel *Cartography;
//this is the definition of Cartography
*cartography = malloc(sizeof(Parcel));
*(*cartography + idx) = readParcel(f);
//this is the code when I want to insert a new Parcel into Cartography
我不明白为什么我在尝试添加新包裹时必须使用“*”两次,有人可以向我解释一下吗?
是因为制图学中的值是 malloc 的地址,所以第一个 * 给了我那个地址,第二个 * 把我带到那个地址?
非常感谢大家的帮助!!
【问题讨论】:
-
Parcel是什么。 -
*(*cartography + idx)看起来不对。乍一看,它应该是*(cartography + idx)或等价的cartography[idx] -
@pmg 如果 Parcel 也是一个指针。所以不一定 - 但在没有显示包裹无法回答的情况下提出问题
-
它是由你的老师写的或用作示例程序 - 太可怕了。最糟糕的 C 实践之一 - 将指针隐藏在 typedef 中。
-
@P__J__ 这是公认的智慧,是的,但是当我第一次使用指针时,使用指针编写可编译代码更容易
typedef,这让我开始了。这不是隐藏的问题,而是便利的问题。当我对指针变得更满意时,我就放弃了。我们不要低估初学者在 C 语言中使用指针所遇到的困难。