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

Programowanie C.

Object Storage Arubacloud
0 głosów
424 wizyt
pytanie zadane 17 czerwca 2015 w C i C++ przez Mateep Użytkownik (850 p.)
uczę się dopiero programowaniai mam kilka takich pytanek małych :) z góry bardzo dziękuję za pomoc :)

1. na czym polega różnica pomiędzy operacjami *p++ oraz (*p)++.

2. co robi ta funkcja : void funkcja(char *s, char *t){ while(*s++ = *t++); }

3. co jest źle:    int wsk = (int*) malloc (10*sizeof(int)); wsk = NULL;

4. czym się różnią te rzeczy:

char (*abc)[12]

 char * abc [12]  

char (*abc [5])()  

char * abc ()

char (*abc)()

2 odpowiedzi

+1 głos
odpowiedź 18 czerwca 2015 przez iwan9449 Pasjonat (20,810 p.)

1. *p++ przesówa wskaźnik p na kolejny "kolejną jednostkę". Np jeżeli p jest typu int ti przesówa ten wskaźnik o 4 bity.

2. Nie powinnu tu być przypadkiem tak: void funkcja(char *s, char *t){ while(*s++ == *t++); } ?

3. Pwinno być: int *wsk = (int*)malloc(10*sizeof(int)); 

4. Tutaj niestety nie pamiętam wszystkich niuansów języka C :)

 char * abc [12]  - Tutaj robisz statyczną 12-elementową tablicę wskaźników do typu char.

char (*abc)[12] - Tutaj robisz dynamiczną talicę wskaźników, której każdy wskaźnik wskazuje na 12 elementową tablicę.

char (*abc[5])() - W tym wypadku nie jestem pewien, ale wydaje mi się, że tworzysz 5-elementową tablicę wskaźników do funkcji.

char * abc() - Tutaj robisz funkcję, która zwraca wskaźnik do typu char.

char (*abc)() - Tutaj robisz wzkaźnik na funkcję.

Pozdrawiam!

komentarz 18 czerwca 2015 przez Mateep Użytkownik (850 p.)
Dziękuje bardzo za informacje!
+1 głos
odpowiedź 18 czerwca 2015 przez draghan VIP (106,230 p.)
edycja 18 czerwca 2015 przez draghan

Bardzo mnie cieszy, że masz takie pytania. :)

To może po kolei, bo iwan9449 nie do końca wyjaśnił wszystko, jak trzeba. ;)

1. na czym polega różnica pomiędzy operacjami *p++ oraz (*p)++.

Operacja (*p)++ najpierw dereferuje wskaźnik, a potem zwiększa otrzymaną wartość o jeden. Wskaźnik nie przesuwa się w wyniku tego działania.
Operacja *p++ najpierw zdereferuje wartość, a potem przesunie adres o jedną "komórkę wyżej" (tak naprawdę rzeczywista wartość przesunięcia jest zależna od typu zmiennej wskaźnikowej).

2. co robi ta funkcja : void funkcja(char *s, char *t){ while(*s++ = *t++); }

Ta funkcja to taki typowy C-misz-masz. Zamiast jakoś czytelnie zapisać, to programiści stosowali takie twory i potem ludzie myśleli "co to jest? Ten język C musi być strasznie trudny, nic nie rozumiem"... ;)

Nie robi ona nic specjalnego - ot przepisuje łańcuch znaków t do łańcucha znaków s. Wszystko dzieje się w instrukcji sterującej pętlą, gdzie najpierw jest robiona dereferencja, wartości są zapamiętywane. Przesuwane są wskaźniki, następnie wykonywane jest przypisanie odczytanych chwilę wcześniej wartości. Na sam koniec sprawdzany jest warunek, a za warunek robi tutaj wartość przepisanej zmiennej - która jest rzutowana na wyrażenie logiczne: jeśli jest tam znak zerowy, to wyrażenie jest fałszywe i pętla się kończy, jeśli nie - powtarzamy procedurę do znudzenia. ;)

Trzecie dobrze wyjaśnił iwan9449, a co do czwartego, to sam nie jestem w tej chwili pewny wszystkich opcji. ;D Kiedy się upewnię, dam Ci znać. :)

komentarz 18 czerwca 2015 przez Mateep Użytkownik (850 p.)

Dziękuje bardzo za informacje!

Podobne pytania

0 głosów
1 odpowiedź 82 wizyt
pytanie zadane 14 maja 2020 w C i C++ przez kmxsimba Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 2,512 wizyt
pytanie zadane 9 października 2015 w C i C++ przez Mateep Użytkownik (850 p.)
0 głosów
2 odpowiedzi 478 wizyt
pytanie zadane 8 stycznia 2019 w C i C++ przez zielony_informatyk Nowicjusz (240 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...