我正在嘗試使用結構在 C 中創建一個堆疊,但是我撰寫的 push 函式表現得很奇怪。我確定很明顯我錯過了一些東西,但我就是不知道是什么。
#include <stdio.h>
#define STACK_SIZE 50
typedef struct stack
{
int top;
int items[STACK_SIZE];
}
STACK;
void push(STACK* st, int newitem)
{
st->top ;
st->items[st->top] = newitem;
printf("%d", st->items[st->top]);
}
int main()
{
int n = 1;
STACK* st;
printf("test 1\n");
st->top = -1;
push(st, n);
printf("test 2\n");
return 0;
}
DevC 只編譯但不運行代碼。OnlineGDB 運行它但只列印第一個測驗。
uj5u.com熱心網友回復:
這是因為您的變數STACK* st;從未正確初始化。
一些要點:
- 不要分配
-1長度(top),0會更好 STACK* st;應該只是STACK st;- 你的函式
void push(STACK* st, int newitem)應該用static鏈接宣告。 - 寫
st->top st通過參考push()函式傳遞變數- 而不是使用bare
return 0;,而是使用return EXIT_SUCCESS;頭檔案中定義的stdlib.h。 - 因為你的總數
STACK_SIZE只有50這樣,int就足夠了。但是隨著你的STACK_SIZE成長使用size_t你的長度(top)。 - 使用
int main(void) { }, 而不是int main() { } - 注意:如果
STACK_SIZE和top變得相等意味著您array已完全填充,那么進一步添加資料將導致Undefined Behavior。
最終代碼
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 50
typedef struct stack
{
int top;
int items[STACK_SIZE];
}
STACK;
static void push(STACK* st, int newitem)
{
if(st->top == STACK_SIZE)
{
fprintf(stderr, "stack size reached maximum length\n");
exit(EXIT_FAILURE);
}
st->items[st->top ] = newitem;
printf("%d\n", st->items[st->top - 1]); // we added 1 to `top` in the above line
}
int main(void)
{
int n = 1;
STACK st;
printf("test 1\n");
st.top = 0;
push(&st, n); //pass by ref
return EXIT_SUCCESS;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455473.html
上一篇:XYZ為線性值,反之亦然
下一篇:如何在這個問題中使用近似演算法?
