Video: Linux Tutorial for Beginners: Introduction to Linux Operating System 2024
In C-programmering worden het type en de grootte van een variabele eerst onthuld door die variabele als een specifiek type te declareren, maar ook door het sizeof-sleutelwoord te gebruiken. De tweede beschrijving van een variabele, de inhoud ervan, kan worden verzameld door de waarde van de variabele te lezen met behulp van de juiste C-taalfunctie.
De derde beschrijving van een variabele is de locatie in het geheugen. U verzamelt deze informatie met behulp van de operator & en de placeholder% p, zoals weergegeven in O Variabele, dus waarom niet?
O VARIABEL, WAARVAN KUN JE DAN?
#include int main () {char c = 'c'; int i = 123; zweven f = 98. 6; dubbele d = 6. 022E23; printf ("Adres van 'c'% pn", & c); printf ("Adres van 'i'% pn", & i); printf ("Adres van 'f'% pn", & f); printf ("Adres van 'd'% pn", & d); return (0);}
Wanneer de & -operator een variabele als prefix gebruikt, retourneert deze een waarde die het -adres van de variabele, of de locatie in het geheugen vertegenwoordigt. Die waarde wordt uitgedrukt in hexadecimaal. Om die waarde te bekijken, wordt het% p conversie-teken gebruikt, zoals getoond in O Variabel, daarom Art Thou?
Oefening 1 : Type de broncode van O Variable, waarom Art Thou? in je editor. Bouw en ren.
De resultaten die door het uit Exercise 1 gegenereerde programma zijn gegenereerd, zijn uniek, niet alleen voor elke computer, maar mogelijk ook voor elke keer dat het programma wordt uitgevoerd.
Adres van 'c' 0x7fff5fbff8ff Adres van 'i' 0x7fff5fbff8f8 Adres van 'f' 0x7fff5fbff8f4 Adres van 'd' 0x7fff5fbff8e8
Variabele c wordt in het geheugen opgeslagen op locatie 0x7fff5fbff8ff - dat is decimale locatie 140 734, 799, 804, 671. Beide waarden zijn natuurlijk triviaal; de computer houdt de geheugenlocaties bij, wat prima is voor mij.
Deze illustratie laat zien hoe die adressen in het geheugen in kaart worden gebracht.
Afzonderlijke arrayelementen hebben ook geheugenlocaties, zoals wordt weergegeven in Geheugenlocaties in een matrix op regel 10. De operator & gebruikt de specifieke elementvariabele als prefix, waarbij een adres wordt opgehoest. Het% p-conversieteken in de printf () -functie geeft het adres weer.
GEHEUGENLOCATIES IN EEN ARRAY
#include int main () {char hello [] = "Hallo!"; int i = 0; while (hallo [i]) {printf ("% c at% pn", hello [i], & hallo [i]); i ++;} return (0);}
Oefening 2 : Maak een nieuw project met behulp van de broncode die wordt weergegeven in Geheugenlocaties in een array. Bouw en ren.
Ook hier is de uitvoer van de geheugenlocatie uniek op elke computer.
H op 0x7fff5fbff8f0 e op 0x7fff5fbff8f1 l op 0x7fff5fbff8f2 l op 0x7fff5fbff8f3 o op 0x7fff5fbff8f4!op 0x7fff5fbff8f5
Anders dan het voorbeeld uit Oefening 1, zijn de adressen die worden gegenereerd door Oefening 2 aangrenzend in het geheugen, de ene byte na de andere.
Oefening 3 : Codeer een programma om vijf waarden weer te geven in een int-array samen met het geheugenadres van elk element. U kunt geheugenlocaties in een array gebruiken om u te inspireren, hoewel een for-lus eenvoudiger te coderen is.
-
Trouwens, de operator & geheugenlocatie zou u bekend moeten zijn. Het wordt gebruikt door de functie scanf (), die het adres van een variabele vereist, niet de variabele zelf. Dat komt omdat scanf () een waarde direct op een geheugenlocatie plaatst. Hoe? Door pointers te gebruiken, natuurlijk!
-
De operator & is ook de bitsgewijze operator AND; de compiler is echter slim genoeg om te weten wanneer & prefix een variabele is en wanneer & onderdeel is van een binaire wiskundige vergelijking.