Tablica - ciąg elementów jednego typu.
Deklaracja:
Inicjalizacja
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 5;
int m = 8;
int tabb1[5]; // ok
int tabb2[3*2+1]; // ok
int tabb3[sizeof(int)+1]; // ok
//int tabb4[-2]; // nie, bo <0
int tabb5[0]; // ???
//int tabb6[6.5]; // nie, bo nie calk.
//int tabb7[(int)2.5]; // ???
int tabb8[n]; // brak dla C90
int tabb9[m]; // Brak dla C90
return 0;
}
Nazwa tablicy jest równocześnie adresem jej pierwszego elementu.
Równoważne:
Uwaga na nawiasy:
Kod do analizy
#include <stdio.h>
#include <stdlib.h>
#define ROZMIAR 3
int main()
{
int tab[ROZMIAR] = {4,7,11};
printf("%i\n",tab==&tab[0]);
printf("%p\n",tab);
printf("%p\n",&tab);
printf("%p\n",&tab[0]);
printf("%d\n",*tab);
printf("%d\n",tab[0]);
printf("%i\n",*tab==tab[0]);
printf("%p\n",tab+1);
printf("%p\n",&tab[1]);
printf("%d\n",*(tab+1));
printf("%d\n",tab[1]);
printf("%d\n",*tab+1);
return 0;
}
Równoważnie
lub
Uwaga: nie możemy wprost odczytać rozmiaru(!).
Kod do analizy:
&
), ewentualnie innym wskaźnikiem.*
&
+
można dodać liczbę całkowitą do wskaźnika albo wskaźnik do liczby całkowitej. Wtedy liczba całkowita jest mnożona przez liczbę bajtów zajmowaną przez wartość wskazywanego typu, a wynik jest dodawany do pierwotnej wartości adresu.-
; wskaźnik musi być pierwszym z operandów. Liczba całkowita jest mnożona przez liczbę bajtów zajmowaną przez wartość wskazywanego typu, a wynik jest odejmowany od pierwotnego adresu.A czy jest dodawanie wskaźników?