2013-07-19 3 views
44

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?

+2

Konieczny jest większy kontekst: Czy pracujesz w określonym języku? Czy masz przykład? – abiessu

+0

należy rozważyć język C. I szukam przykładu, w którym nazwy tablicowe nie ulegają rozpadowi na wskaźnik. –

+1

@TheJoker podałem [tutaj odpowiedź] (http://stackoverflow.com/questions/15177420/what-does-sizeofarr-return/15177499#15177499), w którym pokazuję te przypadki, –

Odpowiedz

45

Pewnie.

w C99 są trzy podstawowe przypadkach, a mianowicie:

  1. gdy jest argument operatora & (adres-F).

  2. , gdy jest to argument operatora sizeof.

  3. kiedy jest Łańcuch znaków typu char [N + 1] lub wielu łańcuch znaków typu wchar_t [N + 1] (N jest długości łańcucha), które są wykorzystywane do inicjowania tablicy, jak w char str[] = "foo"; lub wchar_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.

+0

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? –

+2

@ TheJoker Nie, to byłby "const char * str_ptr =" literał ";'. W moim przykładzie 'str' jest zadeklarowane jako tablica, stąd ** jest ** tablicą. –

+0

@GrijeshChauhan Dzięki :) –