所以我有2个结构。 1是intStk,另一个是intStkNode。 intStk包含节点和头部中每个数组的大小,即最近创建的intStkNode。 intStkNode将包含一个tos int,它是它所在的索引,内容是intStk中包含的int大小的int数组,next是下一个Node的int。
因此,如果我有1个节点且大小为5,则头部将指向此节点,并且节点将具有0的tos,大小为5的数组全为空,并且接下来为-1。
如果有两个节点且大小为5,则新节点的tos为1,大小为5的数组,接下来为9. intStk头现在将指向tos为1的那个。
以下是我的代码到目前为止以及我的问题。
struct intStack {
unsigned int allocatedSize;
struct intStackNode * head;
};
struct intStackNode {
unsigned int tos;
int * contents;
int next;
};
struct intStackNode *
makeNewNode(intStack * stk) {
struct intStackNode * newNode = malloc(sizeof(struct intStackNode));
int currentLocation = stk->head->tos;
//this is not complete yet.
return newNode;
}
intStack *
stkCreate(unsigned int size) {
intStack * stk = malloc(sizeof(intStack));
stk->allocatedSize = size;
struct intStackNode * intStk = malloc(sizeof(struct intStackNode));
intStk->tos = 0;
stk->head = 0;
int * intStk->contents[size];
intStk->next = -1;
return stk;
}
问题。
int currentLocation = stk-> head-> tos的语法是什么?正确?这会在第一个例子中返回0,在第二个例子中返回1吗?
stk-> head = 0的语法是什么?做我想做的事情?这是在创建阶段,因此每次都会指向tos为0的节点,但对我来说这似乎很奇怪。
int * intStk-> contents [size];不管用。这是数组的大小取决于传递的内容。我收到了这个错误,对我来说没有意义。
intstk-lc:33:14:错误:在' - >'标记
属性' >int * intStk-> contents [size];
答案 0 :(得分:1)
您的问题的答案,按照正确的顺序,没有立即修复,如下:
stk-> head = 0的语法是什么?做我想做的事情?这是在创建阶段,因此每次都会指向tos为0的节点,但对我来说这似乎很奇怪。
它将指针stk->head
设置为空指针。它没有指向任何地方。这将我们带到下一个问题。
int currentLocation = stk-> head-> tos的语法是什么?正确?这会在第一个例子中返回0,在第二个例子中返回1吗?
由于stk->head
在创建后立即是空指针,因此尝试取消引用它的tos
字段会导致程序的行为未定义。
int * intStk-> contents [size];不管用。这是数组的大小取决于传递的内容。
不,不是。 contents
的{{1}}字段是指针。您不能将其重新定义为数组,这不是您可以为此指针指向的数组分配空间的方式。整条线都是错误的。
除此之外,您的代码(不是那样)以不检查struct intStackNode
的返回值的形式存在微妙的错误,并假设它总是会成功。
解决这两个问题:
您已经分配了malloc
,因此设置struct intStackNode
指向它:
stk->head
如果您希望struct intStack * stk = malloc(sizeof *stk);
if(stk == NULL) {
// handle allocation error somehow.
// return from function or abort program.
// Do not just continue as if all is well.
}
stk->allocatedSize = size;
stk->head = malloc(sizeof *(stk->head));
if (stk->head == NULL) {
// another error to handle. Don'e leak resources.
free(stk);
// handle the error
}
指向stk->head->contents
- 完整的整数,您还需要分配它们:
size
答案 1 :(得分:0)
这些是正式您问题的答案。我保证他们是正确的,我不能保证他们会以任何方式帮助你。
int currentLocation = stk-> head-> tos的语法是什么?正确?
是
这会在第一个例子中返回0,在第二个例子中返回1吗?
在整个程序至少在语法上正确之前,它根本无法返回任何内容。假设您只修复了语法错误,它在第一个示例中无法返回任何内容,因为列表中没有节点。头指针不指向任何节点;见下文。假设你修复了它,它不能在第二个例子中返回任何有两个节点的东西,因为它总是有一个节点。该程序从不链接两个或多个节点以形成链接列表。鉴于struct intStackNode
的声明它不能这样做。
stk-> head = 0的语法是什么?做我想做的事情?这是在创建阶段,因此每次都会指向tos为0的节点,但对我来说这似乎很奇怪。
不,它不会指向tos为0的节点或任何其他节点。 0是一个特殊常量,使指针指向无效对象。通常它在C中拼写为NULL以避免混淆。
int * intStk-> contents [size];不管用。这是数组的大小取决于传递的内容。我收到了这个错误,对我来说没有意义。
语法不正确。要分配大小为size
的整数数组,请执行以下操作:
intStk->contents = malloc(size * sizeof(int));