Dyskusja:C/Wskaźniki
Dodaj tematbłędy
[edytuj]&liczba1 = &liczba2;
to nie działa, sprawdzałem na GCC.
-
[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)
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)