void 포인터를 사용하여 C에서 기본 큐 구조를 구현했습니다. 절차는 다음과 같다 :void *를 사용한 C 대기열 구현 - 좋은 또는 나쁜 연습?
- 는 구조를 초기화 - I 변수 타입의 크기가 큐
- 푸시 저장되도록 설정 - I 변수에 대한 포인터가 저장되는 전달 큐는 잡고
- front - 구조체는 앞에있는 요소에 void *를 반환합니다. 포인터를 잡을 수도 있고
memcpy()
로컬 복사본을 가지고있을 수도 있습니다.
구조체 자체는 다음과 같습니다
struct queue
{
void* start; //pointer to the beginning of queue
void* end; //-||- to the end
size_t memsize; //size of allocated memory, in bytes
size_t varsize; //size of a single variable, in bytes
void* initial_pointer; //position of the start pointer before pop() operations
};
시작과 끝은 현재 할당 된 메모리 블록 내에서 어떤 위치를 가리 단지 무효 포인터. 큐에 요소를 밀어 넣으면 끝 포인터를 varsize
만큼 증가시킵니다. 내가 pop()하면 끝 포인터도 varsize
만큼 감소시킵니다. 내가 여기에 기능 코드를 게시한다고 생각하지 않습니다
, 그것은 100 개 라인 이상입니다.
는 질문 :이 나쁜 관행 좋은 또는 간주됩니다? 왜 (안)?
참고 : 난 그냥이 일의 질에 대해 부탁 해요 C에서 큐를위한 많은 다른 옵션이 있다는 것을 알고 있어요.
편집 : 구현은 여기에 있습니다 : HTTP : 당신은 종류와 크기를 모르는 경우 // 89.70.149.19의 /stuff/queue.txt
메모리 크기에 size_t를 사용하십시오. –
'void *'를 사용하여 제네릭 코드를 작성하는 것이 좋습니다. –
@RanEldan 감사합니다. 여기에서 수정했습니다. – szczurcio