ANSI C 6

ANSI C 6



5 WSKAŹNIKI I TABLICE _ Obrazowo wygląda to tak:


5 2 WSKAŹNIKI I ARGUMENTY FUNKCJI



w miejscu wywołania:


jslasza wersja funkcji getint zwraca: EOF - gdy napotka koniec plikuj. kolejne znaki z wejścia nie tworzą liczby, oraz wartość dodatnią - jeśli na wejściu

1 ^ nAnroumo I iptKa *



Argumenty wskaźnikowe pozwalają funkcji mieć dostęp do (a więc i zmieniać wartość) obiektów należących do funkcji wywołującej. Jako przykład rozważmy funkcję getint, która wczytując nie sformatowane dane wejściowe, przekształca strumień znaków na wartości całkowite (jedną na każde wywołanie). Funkcja ta musi przekazać znalezioną wartość oraz sygnał końca pliku, gdy nie ma już więcej znaków z wejścia Obie wartości muszą być przesłane dwiema oddzielnymi ścieżkami, gdyż niezależnie od tego, jaką wartość ma EOF, może ona być również wartością wczytanej liczby.

Jedno z rozwiązań polega na tym, że funkcja getint zwraca sygnał o napotkaniu końca pliku jako swoją wartość funkcyjną, podczas gdy znalezioną liczbę całkowitą przekazuje do funkcji wywołującej za pomocą argumentu wskaźnikowego. Taki sam schemat jest podstawą działania standardowej funkcji scanf; zajrzyj do p. 7.4.

W następującej pętli do wypełnienia tablicy wartościami całkowitymi użyto funkcji getint:


int n, array[SIZE], getint(int *);

for (n = 0; n < SIZE && getint(&array[nj) != EOF; n++)


#include <ctype.h>

int getch(void); void ungetch(int);

/* getint: wczytaj następną liczbę całkowitą */ int getint(int *pn)

{

int c, sign;

while (isspace(c = getch())) /* pomiń białe znaki */

I

if (! isdigit(c) && c != EOF && c != ’+’ && c !=    {

ungetch(c); /* to nie jest liczba */ return 0;

}

sign = (c ==    ? -1 : 1;

if (C == V 11 c == c = getch();

for(*pn = 0; isdigit(c); c = getch())

*pn = 10 * *pn + (c - ’0’);

*pn *= sign; if (c != EOF) ungetch(c); return c;

eałej funkcji getint konstrukcja *pn jest używana jak zwykła zmienna całkowi-

nadt° skorzystaliśmy z funkcji getch i ungetch (opisanych w p. 4.3), aby

.owy znak> który trzeba było przeczytać, mógł być z powrotem odesłany na WeJście.

W każdym kroku pętli wywołanie funkcji getint umieszcza w array[n) wartość kolei' nej wejściowej liczby; zwiększa się też licznik n. Zauważ, że przekazanie do funkcji getint adresu elementu array[n] jest konieczne, inaczej bowiem nie ma sposobu nat0, by mogła ona obliczoną wartość przekazać do miejsca wywołania.

\ ——

pr^    --

eja ^ ^iej definicji funkcji getint warunek w powyższej pętli trzeba uzupełnić sprawdzeniem, czy funk-liC2b Faca zero- Ppzy podanym warunku funkcja getint zatnie się na pierwszym znaku nic należącym do y zawsze sygnalizując zero), mimo że pętla będzie się kręcić dalej. - Przyp. tłum.

134


135



Wyszukiwarka

Podobne podstrony:
ANSI C 6 5 WSKAŹNIKI I TABLICE_______—- Oprócz tej różnicy w zapisie tablicę dwuwymiarową traktuj
30 31 (19) 30 1. Spostrzeganie tworzyć, badani nie potrafili wykonać tego prostego zadania. Wyglądał
...„IWIĆ Cl _ ,**. *»• wystarczy na i bezbłędnie polutowac óor wygląda to tak: ... -niAZU
I wygląda to tak. Wygląda to tak, kreska może być nawet krzywa, ważne by była namalowana jak najbliż
I wygląda to tak. Wygląda to tak, kreska może być nawet krzywa, ważne by była namalowana jak najbliż
Scan0062 (7) -    Nie, nie. - Pomachał do mnie rękami o długich palcach. Wygląda
I wygląda to tak. Wygląda to tak, kreska może być nawet krzywa, ważne by była namalowana jak najbliż
DSC00676 Zastosowanie wskaźników w argumentach funkcji •    Jeśli chcemy zmienić ten
DSC00747 Zastosowanie wskaźników w argumentach funkcji •    Tablicę można wysiać do f
Uwaga, nawet jeżeli po partykule mamy kompletne zdanie w datum ąuestionis, to i tak partykuła wyznac
DSC00750 Zastosowanie wskaźników, w argumentach funkcji •    Odebranie przez funkcję
DSC00675 Zastosowanie wskaźników, w argumentach funkcji •    Przy przekazywaniu argum

więcej podobnych podstron