• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Inkrementowanie wskaźników oraz wywoływanie funkcji ze wskaźnikami.

Aruba Cloud - Virtual Private Server VPS
0 głosów
328 wizyt
pytanie zadane 8 grudnia 2018 w Programowanie przez Zaratustra Początkujący (320 p.)

Witam, napisałem program z książki i nie rozumiem dwóch zależności.

1. W Linii 12, dlaczego umieszczamy &, przy wywoływaniu funkcji "analiza"?

2. Dlaczego ++*o, ++*i a nie *o++?

#include <stdio.h>
#include <ctype.h>
int analiza(char linia[], int *l, int *c, int *o, int *i);

void main()
{
    char lan[100];
    char lun[100];
    int lit = 0, cyf = 0, ods = 0, inne = 0, licz = 0;
    printf("Podaj lancuch: \n");
    fgets(lan, sizeof lan, stdin);
    licz =analiza(lan , &lit, &cyf, &ods, &inne);
    printf("W lancuchu: %s liczba znakow = %d \n",lan,licz);
    printf("w tym: \n\tlitery: %d\n\tcyfry: %d\n", lit, cyf);
    printf("\todstepy: %d\n\tinne: %d\n",ods,inne);
}

int analiza(char linia[], int *l, int *c, int *o, int *i)
{
    char znak; int j = 0;
    while((znak=toupper(linia[j]))!='\0')
    {
        if(znak >= 'A' && znak <= 'Z') ++*l;
        else if(znak >= '0' && znak <= '9') ++*c;
        else if(znak == ' ' || znak == '\t') ++*o;
        else ++*i;
        ++j;
    }
    return j;
}

Z góry dzięki.

1 odpowiedź

0 głosów
odpowiedź 8 grudnia 2018 przez Marcin Siniarski Gaduła (4,420 p.)
edycja 8 grudnia 2018 przez Marcin Siniarski

1. Znak '&' (ampersanda) pobiera adres RAM zmiennej.
Wskaźnik to zmienna trzymająca adres RAM innej zmiennej (dlatego jest nazywana wskaźnikiem).  Znak '*' pozwala otrzymać dostęp do zmiennej po adresie we wskaźniku.

2. Chodzi tu o kolejność wykonywania poleceń.
std::cout << ++i << std::endl; - Najpierw inkrementuje, a później wypisuje
std::cout << i++ << std::endl; - Najpierw wypisuje, a później inkrementuje


Jeszcze co do funkcji analiza. Autorowi książki poleciłbym zobaczyć tą stronę. Operatory '++' wykonują się pierwsze co prowadzi do inkrementacji adresu we wskaźniku.
EDIT: Sprawdziłem i monika90 ma racje. Działa jak powinno.

komentarz 8 grudnia 2018 przez monika90 Pasjonat (22,940 p.)
++*x nie inkrementuje wskaźnika x, lecz to na co on wskazuje

Podobne pytania

0 głosów
1 odpowiedź 804 wizyt
–1 głos
3 odpowiedzi 1,469 wizyt
pytanie zadane 9 września 2018 w C i C++ przez niezalogowany
0 głosów
2 odpowiedzi 702 wizyt
pytanie zadane 4 kwietnia 2019 w C i C++ przez four Użytkownik (720 p.)

93,334 zapytań

142,328 odpowiedzi

322,406 komentarzy

62,670 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...