• 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.

0 głosów
419 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ź 912 wizyt
–1 głos
3 odpowiedzi 1,676 wizyt
pytanie zadane 9 września 2018 w C i C++ przez niezalogowany
0 głosów
2 odpowiedzi 966 wizyt
pytanie zadane 4 kwietnia 2019 w C i C++ przez four Użytkownik (720 p.)

93,631 zapytań

142,555 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...