>source

포인터와 메모리에 대해 중요한 것을 놓치고 있는 것 같습니다. 필요한 최소 code는 다음과 같습니다.

#include <stdio.h>#include <stdlib.h>struct node {
    int value;
    struct node* next;
};
struct node* init(int value) {
    struct node* head= (struct node*)malloc(sizeof(struct node));
    if (!head) return NULL;
    head->value= value;
    head->next= NULL;
    return head;
}
void insert_back(struct node* head, int value) {
    if (!head) return;
    struct node* temp= head;
    struct node* new= (struct node*)malloc(sizeof(struct node));
    while (temp->next != NULL) {
        temp= temp->next;
    }
    temp->next= new;
    new->value= value;
    new->next= NULL;
    return;
}
struct node* insert_front(struct node* head, int value) {
    struct node* temp;
    struct node* new= (struct node*)malloc(sizeof(struct node));
    new->value= value;
    new->next= head;
    temp= head;
    head= new;
    head->next= temp;
    return new;
}
void insert_front_2(struct node* head, int value) {
    struct node* temp;
    struct node* new= (struct node*)malloc(sizeof(struct node));
    new->value= value;
    new->next= head;
    temp= head;
    head= new;
    head->next= temp;
}
void print_list(struct node* head) {
    if (!head) return;
    struct node* temp= head;
    int i= 0;
    while (temp != NULL) {
        printf("At position %d value %d \n", i, temp->value);
        i++;
        temp= temp->next;
    }
}
int main() {
   struct node* head= init(5);
    insert_back(head, 7);
    insert_back(head, 9);
    insert_back(head, 12);
    insert_back(head, 13);
    insert_back(head, 14);
    insert_back(head, 15);
    head= insert_front(head, 100);
    insert_front_2(head, 200);
    print_list(head);
    free(head);
    return 1;
}

문제는 기능에 관한 것입니다.무효 insert_front_2(...). 왜인지 이해가 안됨구조체 ndoe * 삽입_앞면완벽하게 작동하지만insert_front_2메인에 있으면 새 헤드를 보유하지 않습니다. 즉, 목록을 인쇄할 때 새 헤드가 인쇄되지 않습니다. 어떤 아이디어? 어떻게 수정해야 하나요무효 insert_front_2(...)작동하게 하려면?

C에서 모든 함수 매개변수는 값으로 전달됩니다. 머리가 함수의 지역 변수라는 것을 의미합니다. 설정해도 호출자의 값은 변경되지 않습니다. 자세한 내용과 수정 방법은 중복 게시물을 참조하십시오(머리를 반환하는 것은 insert_front에서 한 것처럼 하나의 옵션입니다.

kaylum2021-11-04 03:30:11

설명 감사합니다. 또한 자세한 내용은 다른 게시물이 실제로 유용합니다. :)

bugs_and_stars2021-11-04 03:30:11

insert_front가 하는 일을 종이에 그리고 추가 문장을 잘라낼 수 있는지 확인하십시오. 포인터에 대해 많은 것을 가르쳐 줄 것입니다.

stark2021-11-04 03:30:11

팁 감사합니다

bugs_and_stars2021-11-03 07:37:22
  • 이전 wordpress : 다른 고양이의 하위 고양이 이름이 중복된 제품 하위 고양이는 슬러그에서 범주 이름을 가져옵니다.
  • 다음 java : GraalVM 앱을 "일반" VM에 배포할 수 있습니까?