2016-10-04 16 views
5

W języku C, czy poniższe są dobrze zdefiniowane?Zainicjować zmienną ze wskaźnikiem do tej zmiennej

void* ptr = &ptr; 
void* array[1] = {array}; 

Innymi słowy, czy można użyć adresu zmiennej do zainicjowania tej zmiennej? Wydaje się działać z kompilatorem GCC, ale chcę tylko wiedzieć, czy jest to coś, na czym mogę polegać.

Edit: Jest to w zasadzie kopią Defining a pointer to refere to same variable name's reference?

+0

Dlaczego myślisz, że może nie działać? Wygląda dla mnie legalnie. To tak jakby mieć ponumerowane pudełka zawierające ich własne liczby zapisane na kawałku papieru wewnątrz ... –

+0

A może martwisz się, że zmienna nie ma adresu w czasie oceniania inicjalizatora? –

+0

"Dobrze zdefiniowane" może rozciągać to, ale nie mogę niczego, co definitywnie mówi, że byłoby nieokreślone. 'void *' jest wyjątkowe, ale nie wiem, czy ta specjalność rozciąga się na 'void **'. –

Odpowiedz

0

Powinno być legalne. Ponieważ ptr nie jest const, jego wartość inicjalizacyjna nie jest ustalona w obszarze kodu .text, a więc powinna być znana w czasie wykonywania i zapisana w pamięci RAM z poprawną wartością.

Powiązane problemy