EDYCJA: najwyraźniej niektóre z nich nie są dozwolone/uległy zmianie w różnych standardach C. Dla mojej własnej hipotetycznej korzyści, udawajmy, że używamy gcc test.c
bez opcji standardowych lub ostrzegawczych.tablice zero length vs. wskaźniki
W szczególności zajmuję się szczegółami ukrytymi pod maską. Dodałem moje bieżące zrozumienie. Czy mam rację?
char **c1; //Size for a pointer is allocated on the stack. sizeof(c1) == sizeof(void*)
char *c2[0]; //Nothing is allocated on the stack. sizeof(c2) == 0
Czy jest jakaś różnica między tymi dwoma przypadkami, których nie znam (poza sizeof)?
struct a {
int i;
char c[0]; //sizeof(a) is sizeof(int)? a.c == (&i)+1?
};
Jak rozumiem, jest to zazwyczaj używane dla tablic o zmiennej długości na końcu struktur. Ale co z tym, że
Co więcej, jak znany jest adres tablicy o zerowej długości, jeśli miejsce na jego wskaźnik nigdy nie jest przydzielone? Przypuszczam, że w ten sam sposób znany jest adres regularnej tablicy, ale w tej chwili staram się omijać go.
Zobacz także [tutaj] (http://stackoverflow.com/a/14643530/912144). – Shahbaz