我一直试图解决" MIME类型"来自此网站的拼图:https://www.codingame.com/games/puzzles/
我在以下网站上找到了这个难题的答案: http://ethiery.vvv.enseirb-matmeca.fr/CGsolo/mime-type.html
p = d.elmts+i;
(第49行)的内容吗?p = d.elmts+i;
时,它就像一个魅力。
(第一次使用stackoverflow。我不确定这是否会显示为代码段。如果不是,请道歉代码
d.elmts[i].ext = malloc(11*sizeof(char));
d.elmts[i].mime = malloc(51*sizeof(char));
scanf("%s %s\n",d.elmts[i].ext, d.elmts[i].mime);
答案 0 :(得分:0)
elmts是数据类型对。
IN()
此表达式仅基于i将下一对分配给p。指针将从elmts(指针算术)移动到sizeof(pair)* i。
该对包含以下2个指针成员,您需要在使用它们之前分配内存。这就是接下来的两行。
char * ext; char * mime;
如果没有移动指针,它将指向同一对。
“p = d.elmts + i”的等效数组表达式是
p = d.elmts+i;
答案 1 :(得分:0)
p是指向结构的指针 - 这意味着p'保存'内存中结构的起始地址 - 因此:对于当前结构(i表示地址偏移),p = d.elmts + i表示存储器中的起始地址。 在该示例中,已经为“dictSize”结构(即结构的数量)分配了存储器。 注意,结构的存储器是连续分配的(即彼此相邻),因此可以使用保留存储器的起始地址(即d.elemts)和一些偏移量(即i
如果声明了一个指向结构的指针,那么当使用箭头符号时,指针只能访问底层结构成员。 如果声明了一个结构(不是指向结构的指针),那么可以使用点表示法访问底层结构成员。
在C中使用'[]'表示法可能被解释为尝试分配实际值(已分配的内存) - 而第50行和第51行中使用的指针表示法只是启用分配内存即指向正在分配的内存的起始地址 - 保存每个成员可能假设的可能值,即尚未将值放入此内存中 - 必须先创建/分配内存。