Dyskusja:C/Wskaźniki

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania

błędy[edytuj]

&liczba1 = &liczba2;

to nie działa, sprawdzałem na GCC.

Racja, nie działa, trzeba będzie jakoś przepisać wstęp. --Derbeth talk 18:19, 5 kwi 2006 (UTC)

-[edytuj]

int (*apa[])[];/* tablica wskaźników 'apa' wskazujących wskaźniki na typ int */

czy nie powinno być:

int (*apa[])[];/* tablica wskaźników 'apa' wskazujących tablice zawierające dane typu int */

?

Błąd w wersji PDF![edytuj]

W wersji PDF na stronie 117 w dziale "Tablice a wskaźniki" znalazłem następujący błąd:
Jest "Z definicji (z wyjątkiem użycia operatora sizeof) wartością zmiennej lub wyrażenia typu tablicowego jest wskaźnik na jej pierwszy element (tab == &tab0).", a powinno być "Z definicji (z wyjątkiem użycia operatora sizeof) wartością zmiennej lub wyrażenia typu tablicowego jest wskaźnik na jej pierwszy element (tab == &tab[0])."
--Pwl (dyskusja) 21:21, 23 paź 2010 (CEST)Odpowiedz[odpowiedz]

Drobna uwaga do następującego tekstu:
Dla ułatwienia przyjęto poniżej, że bajt ma 8 bitów, typ int składa się z dwóch bajtów (16 bitów), typ long składa się z czterech bajtów (32 bitów) oraz liczby zapisane są w formacie big endian (tzn. bardziej znaczący bajt na początku), co niekoniecznie musi być prawdą na Twoim komputerze.

Warto trzymać się rzeczywistości i nie podchodzić do pewnych rzeczy w zbyt dużym uproszczeniu gdyż

a) int to 32 bity (gcc) http://pl.wikipedia.org/wiki/Liczba_ca%C5%82kowita_(typ_danych)

b) liczby zapisywane są w formacie little endian przyanjmnej na x86, z której jak przypuszczam wiekszość z nas korzysta http://pl.wikipedia.org/wiki/Kolejno%C5%9B%C4%87_bajt%C3%B3w przykładowo:

unsigned short int s = 0x1234; if(((unsigned char)s) == 0x12) printf("Big endian\n"); else if(((unsigned char)s) == 0x34) printf("Little endian\n");

Wiem że uproszczenia są dobre ale później ludzie mogą się godzinami zastanawiać dlaczego program generuje takie a nie inne wyniki.

Obsługa pamięci[edytuj]

tablica = (float*) malloc(rozmiar * sizeof(*tablica));

z tego co wiem, to rzutowanie na jest tutaj zbędne i może powodować trudne do wykrycia błędy, może warto byłoby usunąć je z przykładu ? W tym temacie ze Stack Overflow jest jasno napisane, że nie powinno się tak robić.

Pod wymienionym linkiem znalazłem więcej argumentów "za" wstawieniem rzutowania niż przeciw, więc hmm.. 87.246.216.126 (dyskusja) 18:48, 18 lis 2015 (CET)Odpowiedz[odpowiedz]