Kurs programowania w C cz. 97

Nasza ocena:

5
Wyświetleń: 490
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Kurs programowania w C cz. 97 - strona 1

Fragment notatki:

114 ROZDZIAŁ 17. WSKAŹNIKI +--------+ |komórka1| +--------+ |11111111| = (unsigned char) 255 +--------+ Gdybyśmy natomiast stworzyli inny wskaźnik do tego adresu tym razem typu  unsi- gned long*  to przy próbie odczytu odczytane zostaną dwa bajty z wartością zapisaną w zmiennej  unsigned int  oraz dodatkowe dwa bajty z niewiadomą zawartością i wów- czas wynik będzie równy  65530 * 65536 +  losowa wartość  : +--------+--------+--------+--------+ |komórka1|komórka2|komórka3|komórka4| +--------+--------+--------+--------+ |11111111|11111010|????????|????????| +--------+--------+--------+--------+ Ponadto, zapis czy odczyt poza przydzielonym obszarem pamięci może prowadzić do nieprzyjemnych skutków takich jak zmiana wartości innych zmiennych czy wręcz natychmiastowe przerwanie programu. Jako przykład można podać ten (błędny) pro- gram3: #include  int main(void) { unsigned char tab[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; unsigned short *ptr= (unsigned short*)&tab[2]; unsigned i; *ptr = 0xffff; for (i = 0; i 

(…)

… <stdio.h>
int main(void)
{
unsigned char tab[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
unsigned short *ptr= (unsigned short*)&tab[2];
unsigned i;
*ptr = 0xffff;
for (i = 0; i < 9; ++i) {
printf("%d ", tab[i]);
}
printf("%d\n", tab[9]);
return 0;
}
Nie można również zapominać, że na niektórych architekturach dane wielobajtowe muszą być odpowiednio wyrównane w pamięci. Np. zmienna dwubajtowa…
... zobacz całą notatkę



Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz