Video: Writing 2D Games in C using SDL by Thomas Lively 2024
I C programmering blir en variabels type og størrelse avdekket først ved å erklære den variabelen som en spesifikk type, men også ved å bruke størrelsen på søkeordet. Den andre beskrivelsen av en variabel, dens innhold, kan hentes ved å lese variabelenes verdi ved hjelp av den aktuelle C-språkfunksjonen.
Den tredje beskrivelsen av en variabel er plasseringen i minnet. Du samler denne informasjonen ved hjelp av & operatøren og% p plassholderen, som vist i O Variabel, hvorfor er du?
O VARIABEL, DERFOR KUNNE DU?
#include int main () {char c = 'c'; int i = 123; flyte f = 98. 6; dobbelt d = 6 022E23; printf ("Adresse på 'c'% pn ', & c); printf ("Adresse på 'i'% pn ', & i); printf ("Adresse på" f '% pn ", & f); printf ("Adresse på" d '% pn ", & d); returnere (0);}
Når & operatøren prefikserer en variabel, returnerer den en verdi som representerer variabelen adresse, eller plasseringen i minnet. Den verdien er uttrykt i heksadesimale. For å se verdien, brukes konverteringstegnet% p, som vist i O Variabel, hvorfor er du?
Øvelse 1 : Skriv kildekoden fra O Variabel, hvorfor er du? inn i redaktøren din. Bygg og løp.
Resultatene som er produsert av programmet generert fra øvelse 1, er unike, ikke bare for hver datamaskin, men også potensielt for hver gang programmet kjøres.
Adresse til 'c' 0x7fff5fbff8ff Adresse til 'i' 0x7fff5fbff8f8 Adresse til 'f' 0x7fff5fbff8f4 Adresse til 'd' 0x7fff5fbff8e8
Variabel c er lagret i minnet på stedet 0x7fff5fbff8ff - det er desimalplassering 140, 734, 799, 804, 671. Begge verdier er trivielle, selvfølgelig; datamaskinen holder oversikt over minnesteder, noe som bare er bra for meg.
Denne illustrasjonen viser hvordan adressene kartlegges i minnet.
Individuelle arrayelementer har også minneposisjoner, som vist i Memory Locations i en Array on Line 10. Operatøren prefixerer den spesifikke elementvariabelen, hoster opp en adresse. Konverteringspersonen% p i funksjonen printf () viser adressen.
MEMORY LOCATIONS I EN ARRAY
#include int main () {char hei [] = "Hei!"; int i = 0; mens (hei [i]) {printf ("% c på% pn", hei [i], og hei [i]); i ++;} retur (0);}
Øvelse 2 : Opprett et nytt prosjekt ved å bruke kildekoden som vises i minnesteder i et array. Bygg og løp.
Igjen er minneplasseringsutgang unikt på hver datamaskin.
H ved 0x7fff5fbff8f0 e ved 0x7fff5fbff8f1 l ved 0x7fff5fbff8f2 l ved 0x7fff5fbff8f3 o ved 0x7fff5fbff8f4!på 0x7fff5fbff8f5
I motsetning til eksemplet fra øvelse 1, er adressene generert av øvelse 2 sammenhengende i minnet, en byte etter den andre.
Øvelse 3 : Kode et program for å vise fem verdier i en int array sammen med hvert elements minneadresse. Du kan bruke Memory Locations i et array for å inspirere deg, selv om en for loop kan være enklere å kode.
-
Forresten skal operatøren for & minneplassen være kjent for deg. Den brukes av scanf () -funksjonen, som krever en variables adresse, ikke selve variabelen. Det er fordi scanf () plasserer en verdi direkte på en minnested. Hvordan? Ved å bruke pekere, selvfølgelig!
-
Operatøren er også bitwise AND operatøren; kompilatoren er imidlertid smart nok til å fortelle når og prefikserer en variabel og når og er en del av en binær matematikkligning.