第一次發佈在這裏,任何幫助,將不勝感激。我試圖通過稱爲Stack_Init的函數來改變我的棧內名爲「try」的值「size」。如果我在函數中打印出「堆棧 - >大小」的值,它會給出正確的大小值(4)。如果我是執行我的函數(在代碼的結束)後打印 try->size
,它會給我的0.1如何通過函數更改結構中數據的值?
struct intnode {
int data;
struct intnode *next;
}; typedef struct intnode node;
struct stack {
node *top;
int size;
}; typedef struct stack Stack;
void Stack_Init(Stack *S, int size){
Stack *stack = malloc(size*sizeof(node));
stack->top = NULL;
stack->size = size;//for some reason, this doesn't change try->size
}
int main(){
Stack *try;
int size = 4;
Stack_Init(try,size);
printf("%d %d ", try->size, try->top);
謝謝值的閱讀!
'Stack * stack = malloc(size * sizeof(node));'。這是一個局部變量。它與'main'中的'try'沒有關係。你爲什麼會這樣想?大多數初學者犯了'S = stack'的錯誤。這也是錯誤的,因爲'S'是函數的局部。但是你甚至沒有這樣做,所以不知道你如何期望'stack'會回到'main'。 – kaylum
我之前將它作爲'S'而不是堆棧,但它並沒有改變主體中的任何東西。現在看看它沒有任何意義,我如何聯繫嘗試函數? –