Jeśli wyrażenie type name[count]jest zapisane w jakiejś funkcji, to powiesz kompilatorowi C, aby przydzielił sizeof(type)*countbajty ramki stosu i obliczył adres pierwszego elementu w tablicy.
Jeśli wyrażenie type name[count]jest zapisane poza wszystkimi definicjami funkcji i struktur, należy poinformować kompilator C, aby przydzielił sizeof(type)*countbajty segmentu danych i obliczył adres pierwszego elementu w tablicy.
namew rzeczywistości jest stałym obiektem, który przechowuje adres pierwszego elementu w tablicy, a każdy obiekt, który przechowuje adres pewnej pamięci, jest nazywany wskaźnikiem, dlatego jest to powód, dla którego traktujesz go namejako wskaźnik, a nie tablicę. Należy pamiętać, że do tablic w C można uzyskać dostęp tylko poprzez wskaźniki.
Jeśli countjest stałym wyrażeniem, którego wynikiem jest zero, to powiesz kompilatorowi C, aby przydzielił zero bajtów albo ramce stosu, albo segmentowi danych i zwrócił adres pierwszego elementu w tablicy, ale problem polega na tym, że pierwszy element tablicy zerowej długości nie istnieje i nie można obliczyć adresu czegoś, co nie istnieje.
Jest to racjonalne, że element nr. count+1nie istnieje w counttablicy -długości, dlatego kompilator C zabrania definiowania tablicy o zerowej długości jako zmiennej wewnątrz i na zewnątrz funkcji, ponieważ jaka jest wówczas jej zawartość name? Jaki namedokładnie adres przechowuje?
Jeśli pjest wskaźnikiem, to wyrażenie p[n]jest równoważne z*(p + n)
Tam, gdzie gwiazdka * w odpowiednim wyrażeniu oznacza dereferencję operacji wskaźnika, co oznacza dostęp do pamięci wskazanej przez p + nlub dostęp do pamięci, w której adres jest zapisany p + n, gdzie p + nwyrażenie wyrażenia, bierze adres pi dodaje do tego adresu liczbę npomnożoną przez rozmiar typu wskaźnika p.
Czy można dodać adres i numer?
Tak, jest to możliwe, ponieważ adres jest liczbą całkowitą bez znaku powszechnie reprezentowaną w notacji szesnastkowej.