2017-11-04 1 views
1

이것은 내가 작성한 대기열에서 앞 항목을 삭제하기위한 코드입니다. itemPtr이 메인에서 어떻게 든 사용될 것이라고 이해하려고합니다. 아직 알려지지 않았지만 요점은 아닙니다. 나는 같은 방법으로 사용되는 NULL과 0이 있습니까C에서 대기열의 링크 된 목록 구현 빈 상태 및 빈 정보

if (queue->count == 0) 

대신

if (!queue->count) 

으로 사용할 수 있는지 여부를 궁금해?

추가하려면 어떻게해야합니까?

free(deleteLoc) 

이 큐 제거 방법이 끝난 후에 deleteLoc가 사라질 것이라고 생각했지만 왜이 값을 추가할까요? 이것은 내 코드가 아니기 때문에 내가 궁금해. deleteLoc에 포함 된 메모리 또는 큐 -> 프론트 메모리를 제거합니까? 요점은 데이터 자체를 사라지게하는 것이 아닌가?

감사합니다. 뭔가 0로 평가되면 당신이 false로 평가하는 부울로 처리하는 경우

bool dequeue(H* queue ,void* itemPtr) 
{ 
    node* deletecLoc; 
    if (!queue->count) 
     return false; 
    *itemPtr = queue->front->dataPtr; 
    deleteLoc = queue->front; 
    if (queue->count == 1) 
     queue->front = queue->rear = NULL; 
    else 
     queue->front = queue->front->next; 
    (queue->count)--; 
    free(deleteLoc); 
    return true; 
} 
+0

우선, 'NULL'은 null * 포인터 *의 상징적 이름입니다. 둘째, C에서는 0이 아닌 값이 모두 참인 반면 0은 거짓입니다. 그것은 논리 부정 연산자'!'가'queue-> count '가 0 (그리고 거짓)이라면'! queue-> count'가 true가 될 것이라고 설명합니다. 이 모든 것은 당신이 [좋은 초보자 몇권을 읽었다면] 알려졌어야합니다. (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list). 거기서 시작하십시오. –

+0

그리고 질문 당 하나의 질문에 보관하십시오. [도움말 페이지] (http://stackoverflow.com/help), 특히 [여기서 어떤 주제에 관해서 물어볼 수 있습니까?] (http://stackoverflow.com/help/) 섹션을 읽어보십시오. on-topic) 및 [ "어떤 유형의 질문을하지 않아야합니까?"] (http://stackoverflow.com/help/dont-ask). 또한 [둘러보기] (http://stackoverflow.com/tour)와 [좋은 질문을하는 방법에 대해 읽어보십시오.] (http://stackoverflow.com/help/how-to-ask). 마지막으로 [Minimal, Complete, Verifiable Example] (http://stackoverflow.com/help/mcve)를 만드는 방법을 배우십시오. –

답변

0

if (queue->count == 0)이 때문에 C에서 if (!queue->count)으로 똑같은 일을 할 것입니다.

이 문맥에서 예, NULL0은 동일한 것을 달성합니다. NULLnull 포인터을 나타내지 만 0은 보통 숫자 0이지만 동일한 것으로 평가됩니다.

마지막으로 free은 이전에 할당 된 메모리를 제거합니다. 모든 코드를 표시하지는 않았지만 insert 함수의 어딘가에 노드를 저장할 메모리를 할당하는 malloc (또는 이와 유사한 함수)이있을 것입니다. Free은 해당 메모리를 없애고 필요할 때 호출해야합니다. 당신은 노드로 끝난다.

+0

실제로 C에서는 'NULL'이 'void *'유형 인 것이 일반적입니다. 'int' 값 '0'과 (의미 상) 매우 다릅니다. 둘은 실제로 섞여서는 안됩니다. –

2

나는

if (queue->count == 0) 

예, 당신은 항상 명시 적으로 비교하고 그 반대의 경우도 마찬가지 제로에 암시 적 비교를 표현할 수

if (!queue->count) 

대신 사용할 수 있는지 여부를 궁금해.

NULL0은 같은 방식으로 사용됩니까? if, while 수행 제로 암시 비교 및 ​​기타 제어문, 동일한 방식으로 동작하도록 제로 NULL 비교 비교의 문맥에서

.

이것은 무엇입니까?

free(deleteLoc) 

enqueue의 코드를보고 malloc 또는 calloc에 대한 호출을 찾을 필요가 이것을 이해합니다. 본질적으로 freemalloc의 "실행 취소"이며 시스템에 더 이상 할당 된 메모리를 동적으로 사용하지 않는다고 알립니다. 그 메모리가 오프되기 때문에

그것은, 그것은 또는 deleteLoc가 가리키는 메모리의 내용을 변경하지 않을 수도 있습니다,하지만 그것은 중요하지 않습니다 deleteLoc가 포함하는 메모리 나 queue->front

을 말살 하는가 프로그램에 대한 제한 : free에 대한 호출 후에 액세스하는 것은 정의되지 않은 동작입니다.