다음 코드에서 C로 포인터로 구현 된 기본 정수 연결 목록을 볼 수 있습니다. 새로운 int- 목록 앞의 val. 이 두 함수는 동등하지만 출력에서는 그렇지 않다고 생각했습니다.C : 연결된 목록 - 함수 "insert first"가 예상대로 작동하지 않습니다.
#include <stdio.h>
#include <stdlib.h>
typedef struct _IntlistElem* Intlist;
typedef struct _IntlistElem {int val; Intlist next;} IntlistElem;
Intlist insertfirst(int val, Intlist list) {
Intlist new = malloc(sizeof(IntlistElem));
new->val = val;
new->next = list;
return new;
}
Intlist insertfirstAlternative(int val, Intlist list) {
IntlistElem new = {val, list};
Intlist head = &new;
return head;
}
void print(Intlist l){
while (l!=NULL){
printf("%d\n", l->val);
l = l->next;
}
printf("_____\n");
}
int main(){
Intlist ls = NULL;
ls = insertfirst(2, ls);
ls = insertfirst(1, ls);
print(ls);
Intlist lsAlt = NULL;
lsAlt = insertfirstAlternative(2, lsAlt);
lsAlt = insertfirstAlternative(1, lsAlt);
print(lsAlt);
return 0;
}
출력 : 질문
1
2
_____
1
1
...
을하는 내 :
이 왜 인쇄 기능이 종료되지 않는 이유는 무엇입니까? (대체 함수를 호출 한 후)
2. 이 2 개의 "insertfirst"함수가 예상했던 것과 다른 이유는 무엇입니까?
이러한 기능의 차이점은 무엇입니까?
나는 귀하의 답변을 기다리고 있습니다. :)
한 줄씩 단계별로 실행할 때 디버거를 사용하여 코드 흐름과 현재 변수 값을 검사하는 방법을 긴급히 알아야합니다. –
'Intlist head = &new;':'new'는 지역 자동 변수입니다. 범위 밖에서는 유효하지 않습니다. – BLUEPIXY
이 코드는 경고 플래그 (gcc는 -Wall -Werror -Wextra)와 함께 컴파일되지 않습니다. 나는 당신이 다음에 그것들을 사용할 것을 권합니다. – qleguennec