【发布时间】:2023-03-16 15:11:01
【问题描述】:
我正在制作指向结构的指针结构。我一直像疯子一样在谷歌上搜索,我不明白为什么下面的 printf 语句给出了不同的内存地址。有人可以向我解释一下吗?
struct board_piece {
board_piece* next;
board_piece* prev;
} board_piece;
main (int argc, char *argv []) {
board_piece *newPiece = malloc (sizeof (board_piece));
board_piece *newPiece2 = malloc (sizeof (board_piece));
newPiece->next = newPiece2;
printf("%x, %x", newPiece->next, newPiece2); //Why aren't these the same address?
}
【问题讨论】:
-
乍一看,我同意你的看法。他们应该是一样的。此外,由于它们是动态分配的,我认为编译器不会优化它们。除了下面提到的 %p 选项之外,我建议您在调试器中查看您的值,看看它何时显示。
-
您发布的代码无效。您定义了一个名为
struct board_piece的类型,而不是board_piece。您将board_piece定义为对象名称,然后将其用作类型名称。main应定义为返回类型为int。您缺少<stdlib.h>和<stdio.h>所需的#include指令。请发布实际的复制粘贴代码。
标签: c