Widziałem w wielu postach, że "w większości przypadków nazwy tablic rozpadają się na wskaźniki".
Czy mogę się dowiedzieć, w jakich przypadkach/wyrażeniach nazwa tablicy nie ulega rozpadowi na wskaźniki do pierwszych elementów?Wyjątek dla tablicy, która nie ulega rozkładowi na wskaźnik?
Odpowiedz
Pewnie.
w C99 są trzy podstawowe przypadkach, a mianowicie:
gdy jest argument operatora
&
(adres-F)., gdy jest to argument operatora
sizeof
.kiedy jest Łańcuch znaków typu
char [N + 1]
lub wielu łańcuch znaków typuwchar_t [N + 1]
(N
jest długości łańcucha), które są wykorzystywane do inicjowania tablicy, jak wchar str[] = "foo";
lubwchar_t wstr[] = L"foo";
.
Ponadto, C11, gdzie nowo wprowadzona operatora alignof
nie pozwala na jego rozpadu argumentu tablicę do wskaźnika albo.
W C++ istnieją dodatkowe reguły, na przykład gdy są przekazywane przez odniesienie.
Przykro mi, ale czy możesz jaśniej wyjaśnić trzecią sprawę? Chodzi mi o to, że nie jest * str * w trzecim przypadku używanym w odniesieniu do położenia pamięci w ciągu znaków? Stąd znowu wskaźnik? –
@ TheJoker Nie, to byłby "const char * str_ptr =" literał ";'. W moim przykładzie 'str' jest zadeklarowane jako tablica, stąd ** jest ** tablicą. –
@GrijeshChauhan Dzięki :) –
Konieczny jest większy kontekst: Czy pracujesz w określonym języku? Czy masz przykład? – abiessu
należy rozważyć język C. I szukam przykładu, w którym nazwy tablicowe nie ulegają rozpadowi na wskaźnik. –
@TheJoker podałem [tutaj odpowiedź] (http://stackoverflow.com/questions/15177420/what-does-sizeofarr-return/15177499#15177499), w którym pokazuję te przypadki, –