로컬 영역에서 전역 포인터를 사용한 다음 포인터를 사용하는 방법을 이해하려고합니다. 이렇게하면 C89 컴파일러가 이렇게 불평하지 않는다는 것을 깨달았습니다.포인터가 타입 변환없이 자신을 가리키고 있습니까?
int* a = NULL;
a = *(&a);
심지어 바람직한가?
로컬 영역에서 전역 포인터를 사용한 다음 포인터를 사용하는 방법을 이해하려고합니다. 이렇게하면 C89 컴파일러가 이렇게 불평하지 않는다는 것을 깨달았습니다.포인터가 타입 변환없이 자신을 가리키고 있습니까?
int* a = NULL;
a = *(&a);
심지어 바람직한가?
로컬 영역에서 전역 포인터를 사용한 다음 포인터를 사용하는 방법을 알아 내려고합니다.
void *ptr = &ptr;
이 (AB)
(이 경우void **
)void *
및 다른 오브젝트 포인터 타입 간의 암시 적 변환 기능을 사용
이 방법이다. ptr
는 자신의 메모리 주소를 포함, 당신은 역 참조 할 수 있습니다
void *qtr = *(void **)ptr;
, qtr == ptr
사실 일 것입니다.
다른 포인터 유형으로도이 작업을 수행 할 수 있다고 생각하지 않습니다.
아, 포인터에 '1'을 어떻게 할당 할 수 있습니까? – Corelation
@Corelation 다음과 같이 : void * p = (void *) 1;'하지만 포인터가 그 포인터를 가리 키지는 않습니다. 이제 당신은 정말로 무엇을 달성하기를 원합니 까? –
설명하기가 복잡합니다. 성취하려고하는 것이지만 불가능하다고 생각합니다. – Corelation
*(&a)
은 단순히 a
(귀하는 a
의 주소를 얻은 다음 역 참조를 사용합니다)과 같습니다. 그래서 코드가 효과적으로 수행합니다
a
에
NULL
를 할당
a = a;
. 그것이 컴파일러가 불평하지 않는 이유입니다.
당신은 포인터에 능숙합니까? 정말 .. 좋아. – Corelation
무엇이 잘못 되었습니까? '& a'는'int **'이며, 역 참조하면'int *'가됩니다. 'a '는 그 자체를 가리 키지 않습니다 - 표현식은'a = a'와 같습니다. –
잘못된 메모리 영역에 있지 않습니다. 그것은 그 자체입니다. 문제가 있습니다. 잘못된 메모리 오류를받지 않고 포인터를 일반적인 변수로 위협 할 수 있습니까? – Corelation