K & R에서 유효한 포인터 연산은 같은 유형의 포인트를 할당하거나 같은 배열을 더하거나 뺍니다 ...... 다른 모든 포인터 연산은 불법입니다.C에서 유효 포인터 연산에 문제가 발생했습니다
그러나 Wikipedia에서 Doubly linked list의 코드를 읽을 때 링크 된 목록의 다른 노드를 가리키는 두 개의 포인터를 비교합니다. 그것은 나를 많이 혼란스럽게했다. 여기에, 그것은 pFast 및 pCurrent을 비교 코드
unsigned int DetectCycleinList(void)
{
DoublLinkedList* pCurrent = pHead;
DoublLinkedList* pFast = pCurrent;
unsigned int cycle = FALSE;
while ((cycle == false) && pCurrent->pNext != NULL)
{
if (!(pFast = pFast->pNext))
{
cycle = false;
break;
}
else if (pFast == pCurrent)
{
cycle = true;
break;
}
else if (!(pFast = pFast->pNext))
{
cycle = false;
break;
}
else if (pFast == pCurrent)
{
cycle = true;
break;
}
pCurrent = pCurrent->pNext;
}
}
입니다 불법이 아니다.
포인터 * 산술 *입니다.이 포인터는 다른 개체에 대한 포인터와 함께 사용할 수 없으며 같음 테스트가 아닙니다. 따라서 두 포인터가 같은 배열을 가리키면 그 배열을 뺍니다. 그러나 포인터가 다른 객체와 동일한 경우에도 포인터는 의미가 없습니다. –
K & R과 같은 소리는 뾰족한 데이터의 조작을 가리키는 반면 Wikipedia 기사는 포인터 자체의 조작을 나타냅니다. –