C 표준에 대한 또 다른 질문입니다. 나는 이것을 테스트했으며 항상 NULL < ptr
을 얻었습니다. 여기서 ptr
은 NULL
과 다른 포인터입니다. 그러나 표준에 따르면 포인터 산술과 비교는 배열 범위 내에서만 정의됩니다. 특정 비교 NULL < ptr
이 합법적인지 확실하지 않습니다.NULL 포인터가 <다른 포인터 (NULL 제외)입니까?
편집 : 나는 K & R을 읽고하고 난 다음 견적을 발견은 :
모든 포인터는 의미 제로와 평등 또는 불평등에 대한 비교 될 수있다. 그러나 동일한 배열의 멤버를 가리 키지 않는 포인터를 사용하여 산술 또는 비교에 대한 동작은 정의되지 않습니다.
이 질문에 이미 주어진 대답에 영향을 주는지 확신 할 수 없습니다. 어쨌든 p > NULL
이 항상 보장되는지 또는 true를 반환하지 않는지 나는 여전히 확신 할 수 없다. p
은 포인터 !=NULL
이다.
정의 아니에요? 0 주소를 참조하지 않는 한 NULL
@JoshPetitt : 여기서 중요한 점은 C에서 포인터의 관계형 비교가 매우 작은 일련의 유효한 시나리오로 제한된다는 것입니다. 두 피연산자는 모두 동일한 집계를 가리키는 포인터 여야합니다. 그렇지 않으면'<'의 동작이 정의되지 않습니다. 그래서, 만약 여러분이'int main() {int x, y; & x & & y;를 반환하십시오. }', 동작은 정의되지 않습니다. 널 포인터가 객체를 가리 키지 않기 때문에 피연산자 (또는 두 피연산자!)가 널 포인터 인 관계 비교를 수행하면 정의되지 않은 동작이 발생합니다. –
그러나'(uintptr_t) & x <(uintptr_t) & y'가 정의되어 있고 함수 호출에 대해 0 또는 1이됩니다. –