2014-11-05 5 views
0

PointerName --- 주소 --- 값
--------- A --------- 1111 ------ 2222
- ------- B --------- 2222 ------ 3333
--------- C --------- 3333 --- --- 4444
--------- D --------- ------ 4444
여기서, 여기서
포인터 값 null C

는 * A가 B와 같아야 중지 * B는 C와 같아야합니다.
* C는 D와 동일해야합니다.
목록의 중지를 나타 내기 위해 D 값을 어떻게 지정해야합니까? 0을 (를) 위험에 빠뜨리고 있습니까?

+1

최소한의 편집 가능한 예를 보여주십시오. – 2501

+0

당신은 우리에게 진짜 이야기를하지 않습니다. 포인터는 메모리의 일부 주소 또는 NULL 값 중 하나를 포함하는 변수입니다. 너 뭐하려고? 세부 사항에서 조금 뒤로 물러나서 우리에게 큰 그림을주십시오. –

+0

질문이 현재 표시되어 있으므로 두 번째 및 세 번째 열은 모두 포인터이므로 "중지"값은 포인터, 즉 NULL이어야합니다. 귀하의 포인터가 다른 포인터를 가리 키므로, 그 "값"도 포인터입니다. –

답변

0

uintptr_t은 정수 유형입니다. 그것은 "어떤 크기의 정수가 포인터의 비트를 담을만큼 충분히 큰지"를 의미합니다. 따라서 p이 뭔가를 가리키면 (uintptr_t *)(p)은 정수를 가리키는 동일한 주소이므로 GET(p)은 해당 주소를 가리키는 정수입니다. NULL은 포인터 유형이므로이를 허용하지 않는 정수에 할당하려고합니다.

값을 0으로 지정하는 것은 허용되지만 포인터를 null로 지정하고 0을 지정하면 포인터가 정수 0을 가리킬 수 있기 때문에 원하는대로 할 수는 없습니다. 포인터 자체를 변경합니다.

나는 모든 캐스팅을 전혀 필요로하지 않는다고 생각하지만 실제로 포인터를 다루기를 원합니다. 그러나 나머지 코드를 보지 않고도 내가하려는 일을 알 수있는 방법이 없습니다.

+0

내 질문을 명확히하기 위해 편집했습니다. – RoastDuck

+0

전혀 도움이되지 않습니다. "WORD"란 무엇입니까 (C에는 그런 것이 없습니다). 왜 주소가 하나의 주소에 속한다고 생각합니까? 주소는 포인터에 속합니다. –

+0

여기서 단어 크기가 메모리 주소 크기라고 가정합니다. – RoastDuck

0

NULL은 보통 (무효 *) 0

상정 당신이있어 반바지 값이 0의 포인터 타입, 즉으로 정의된다 (당신이 WORD? 즉, 16 비트 값으로 무엇을 의미하는) A의, B, C 및 D가 있습니다.

따라서 짧은 문자를 지정해야합니다.

올바른 단락 할당 방법은 NULL이 아닌 포인터를 사용하는 것이 아니라 짧은 값으로 지정하는 것입니다.