ANSI C 7

ANSI C 7



5 WSKAŹNIKI I TABLICE

oba zapisy a[3][4] i b[31[4] są poprawnymi odwołaniami do pojedynczego obiekty typu int. Lecz a jest prawdziwą dwuwymiarową tablicą: zarezerwowano dla niej 200 miejsc o rozmiarze odpowiednim dla typu int, a do znalezienia elementu tablicy a[mersz][kolumna\ stosuje się tradycyjny przepis na wyliczenie indeksu dla tablic prostokątnych: 20 * wiersz + kolumna. Natomiast definicja b przydziela jedynie 10 miejsc pamięci na wskaźniki i nie inicjuje ich; nadanie wartości początkowych musi być zrobione jawnie - statycznie lub programowo. Przypuśćmy, że w istocie każdy z elementów tablicy b wskazuje na tablicę 20 elementów całkowitych. Wówczas mamy zarezerwowanych 200 miejsc pamięci na wartości całkowite plus te dziesięć komórek na wskaźniki. Ważną przewagą tablicy wskaźników jest to, że wiersze tablicy mogą mieć różne długości. W takim razie nie* wszystkie elementy tablicy b muszą wskazywać na dwudziestoelementowe wektory; kilka z nich może wskazywać na wektory dwuelementowe, inne - na pięćdziesięcioelementowe, a jeszcze inne mog$ w ogóle na nic nie wskazywać.

Chociaż ograniczyliśmy rozważania wyłącznie do obiektów całkowitych, w rzeczywistości z tablic wskaźników korzysta się najczęściej w sposób podobny do przedstawionego w funkcji month_name: zapamiętuje się w nich teksty o różnych długościach. Porównaj deklarację i ilustrację tablicy wskaźników:

char *name[] = { "Błędny miesiąc”, "Sty”, "Lut”, "Mar” };

name:

z deklaracją i ilustracją tablicy dwuwymiarowej:

char aname[J[15] = {"Błędny miesiąc”, "Sty”, "Lut”, "Mar” }; aname:

Błędny miesiąc \o    Sty \o    Lut\o    Mar\o    "~~~J

0    15    30    45

Ćwiczenie 5.9. Napisz na nowo funkcje day^of_year i month-day, stosuj# wskaźniki zamiast indeksowania tablic.

5.10 ARGUMENTY wywołania programu

powered by

Mi siol



Argumenty wywołania programu

W środowiskach wyposażonych w C do uruchamianego programu można przekazać parametry, czyli argumenty wywołania, w wierszu polecenia wywołującego program. Działanie każdego programu rozpoczyna się wywołaniem funkcji main z dwoma argumentami. Pierwszy, umownie nazwany argc (od ang. argument count\ jest liczbą argumentów, z jakimi program został wywołany; drugi, argv (od ang. argument vector), jest wskaźnikiem do tablicy zawierającej argumenty, każdy argument jako osobny tekst. Do operowania na tych tekstach zwyczajowo stosujemy kilka poziomów wskaźników.

Najprostszym przykładem jest program echo, który jak echo powtarza argumenty swego wywołania, wypisując je w osobnym wierszu rozdzielone odstępami. Jeśli więc polecenie miało postać.

echo ahoj, przygodo

to wynikiem programu będzie wiersz

ahoj, przygodo

Zgodnie z przyjętą konwencją argv[0] jest nazwą, z jaką program został wywołany, licznik argc jest więc co najmniej równy l. Wartość argc równa 1 oznacza, że w wierszu polecenia po nazwie programu nie było argumentów. W powyższym przykładzie argc równa się 3, a argv[0], argv[1] i argv[2] wskazują odpowiednio napisy 'echo”, ”ahoj,” i "przygodo”. Pierwszym prawdziwym argumentem jest argv[1], a ostatnim argv[argc-1]; dodatkowo standard wymaga, aby element argv[argc] był wskaźnikiem pustym, tj. równym NULL.

argv:

echo \o

ahoj, \o

przygodo \o

Pierwsza wersja programu echo traktuje argv jak tablicę wskaźników do znaków: #include <stdio.h>

/* echo argumentów wywołania; wersja 1 */ main(int argc, char *argv[ ])

{

int i;

157


Wyszukiwarka

Podobne podstrony:
ANSI C 7 5 WSKAŹNIKI I TABLICE Ćwiczenie 5.1. Tak jak została napisana, funkcja getint traktuje zn
ANSI C 3 5 WSKAŹNIKI I TABLICE możliwości są zawarte w funkcjach: getline (rozdz. 1 i 4), atoi, it
ANSI C 4 WSKAŹNIKI I TABLICE Wskaźnik jest zmienną, która zawiera adres innej zmiennej. W języku C
ANSI C 5 5 WSKAŹNIKI I TABLICE Jeżeli wskaźnik ip wskazuje na zmienną całkowitą x, to *ip może wys
ANSI C 6 5 WSKAŹNIKI I TABLICE _ Obrazowo wygląda to tak: 5 2 WSKAŹNIKI I ARGUMENTY FUNKCJI w miej
ANSI C 8 5 WSKAŹNIKI I TABLICE Między nazwą tablicy a wskaźnikiem jest jednak istotna różnica, o k
ANSI C 9 5 WSKAŹNIKI I TABLICE______—-- alloc i afree jest stosem lub listą LIFO (ang. last-in, fi
ANSI C 0 5 WSKAŹNIKI I TABLICE o specjalną wartość wskaźnikową. Stała NULL jest zdefiniowana w
ANSI C 1 5 WSKAŹNIKI I TABLICE Stałe napisowe chyba najczęściej występują jako argumenty funkcji,
ANSI C 2 5 WSKAŹNIKI I TABLICE _______^ operator przyrostkowy ++ nie zmieni t, dopóki nie zostanie
ANSI C 4 5 WSKAŹNIKI I TABLICE #define MAXLEN 1000 /* maks. długość wiersza wejściowego */ int get
ANSI C 5 5 WSKAŹNIKI I TABLICE /* swap: zamień miejscami v[i] i v[j] */ void swap(char *v[], int i
ANSI C 6 5 WSKAŹNIKI I TABLICE_______—- Oprócz tej różnicy w zapisie tablicę dwuwymiarową traktuj
ANSI C 8 5 WSKAŹNIKI I TABLICE ____________— for (i = 1; i < argc; i-H-) printf(,,%s%s”, argv[i
ANSI C 9 5 WSKAŹNIK! I TABLICE ________— A oto program: #include <stdio.h> #include
ANSI C 0 5 WSKAŹNIKI I TABLICE -------- ten program tak, aby najlepiej wykorzystywał dostępną mu p
ANSI C 1 5 WSKAŹNIKI I TABLICE------- if (left >= right) /* nic nie rób, jeśli tablica zawiera
ANSI C 2 5 WSKAŹNIKI I TABLICE _______—— Ćwiczenie 5.16. Dodaj opcję -d (kolejność słownikowa) spr
ANSI C 3 5 WSKAŹNIKI I TABLICE__-— --- konstrukcja *pfa[] zostanie rozpoznana jako deklarator, a z

więcej podobnych podstron