kjetil7 Skrevet 21. april 2005 Del Skrevet 21. april 2005 (endret) Jeg har bare skumma gjennom her, men std::cout << (int*) a << std::endl; skriver ut verdien til a casta til en int-peker. Dvs. samme verdien som a er satt til, men vil sannsynligvis bli skrevet ut som en hex-verdi. Følgende er vel en grei demonstrasjon: #include <iostream> int main() { int a = 10; std::cout << "a: " << a << std::endl; std::cout << "a castet til en int-peker: " << (int*) a << std::endl; std::cout << "adressen til a: " << & a << std::endl; } Endret 21. april 2005 av kjetil7 Lenke til kommentar
☀ ❄ Skrevet 21. april 2005 Del Skrevet 21. april 2005 (endret) Det som skjer er at a castes til en adresse, og skrives ut som adressen 10 (hex: A). Nøyaktig hvordan en adresse skrives ut, kan variere fra plattform til plattform. den utskriften gir ingen adresse. Den gir verdien til variabelen. Den skrives ut som en adresse. Det betyr at den blir formattert på samme måte som en int* blir formattert når den skrives ut. Altså, variabelen a blir skrevet ut som om den var en adresse, selv om den ikke er det. Edit: Innlegg 666 Endret 21. april 2005 av Myubi Lenke til kommentar
frg Skrevet 21. april 2005 Forfatter Del Skrevet 21. april 2005 Altså, variabelen a blir skrevet ut som om den var en adresse, selv om den ikke er det. Ok - den er grei. Da mistforstod jeg hva som ble sagt tidligere. Lenke til kommentar
kjetil7 Skrevet 21. april 2005 Del Skrevet 21. april 2005 Det som skjer er at a castes til en adresse, og skrives ut som adressen 10 (hex: A). Nøyaktig hvordan en adresse skrives ut, kan variere fra plattform til plattform. den utskriften gir ingen adresse. Den gir verdien til variabelen. Den skrives ut som en adresse. Det betyr at den blir formattert på samme måte som en int* blir formattert når den skrives ut. Altså, variabelen a blir skrevet ut som om den var en adresse, selv om den ikke er det. Edit: Innlegg 666 Men i alle dager... er det ikke det jeg skrev da? Lenke til kommentar
JBlack Skrevet 21. april 2005 Del Skrevet 21. april 2005 Ting er vel oppklart, men la oss kverrulere litt. Det som skrives ut er faktisk en adresse. For det er ikke a som skrives ut, men a castet til en peker (adresse) til int. La oss si at man gjør slik i stedet: int a=10; int *b=(int *)a; cout << b; Dette er ekvivalent, bare at jeg bruker en hjelpevariabel for å illustrere hva som skjer. Det som skrives ut er altså en adresse, men det er ikke adressen til a. Den kjenner vi ikke. Adressen vi skriver ut er 10 (eller 0x000a eller $000a eller en annen måte å skrive adresse på), og hva som er på adresse 10 er uspesifisert. Lenke til kommentar
frg Skrevet 21. april 2005 Forfatter Del Skrevet 21. april 2005 Det som skrives ut er faktisk en adresse. For det er ikke a som skrives ut, men a castet til en peker (adresse) til int. La oss si at man gjør slik i stedet: int a=10; int *b=(int *)a; cout << b; Dette er ekvivalent, bare at jeg bruker en hjelpevariabel for å illustrere hva som skjer. Det som skrives ut er altså en adresse, men det er ikke adressen til a. Den kjenner vi ikke. Adressen vi skriver ut er 10 (eller 0x000a eller $000a eller en annen måte å skrive adresse på), og hva som er på adresse 10 er uspesifisert. Dette klarer jeg ikke å forstå..... Hvorfor er bestandig adressen det som som det verdien til variabelen a har da? Lenke til kommentar
☀ ❄ Skrevet 21. april 2005 Del Skrevet 21. april 2005 Men i alle dager... er det ikke det jeg skrev da? Jo, men enkelte trenger visst å få det inn med teskje... Lenke til kommentar
frg Skrevet 21. april 2005 Forfatter Del Skrevet 21. april 2005 (endret) ok - bare for å få avsluttet dette: det som skjer er at a blir(midlertidig) kastet til en int * og derfor blir det tolket som om innholdet(f.eks 10) var en adresse. Kan jeg konkludere med det? Endret 21. april 2005 av frg Lenke til kommentar
☀ ❄ Skrevet 21. april 2005 Del Skrevet 21. april 2005 Jepp. For øvrig får du lov til å spørre videre om det er noe mer som er uklart. Å si at det var litt teskje inne i bildet var på ingen måte klaging eller kritikk. Spørsmål som går på forståelse (eller manglende sådan) er en velkommen avveksling fra de (litt for) vanlige «Hvordan lære C++?», «Hvordan få programmet til å vente på brukerinteraksjon?», «Bør jeg lære C eller C++?» osv. Så bare spør Lenke til kommentar
JBlack Skrevet 22. april 2005 Del Skrevet 22. april 2005 ok - bare for å få avsluttet dette: det som skjer er at a blir(midlertidig) kastet til en int * og derfor blir det tolket som om innholdet(f.eks 10) var en adresse. Kan jeg konkludere med det? Dette er ingen adresse: a Dett er en adresse: (int *)a Men det siste er ikke a, det er bare en andresse, men den er ikke tilordnet noen variabel. Så variabelen a endrer seg ikke. Men glem dette om du ikke forstår hva jeg mener. Det er ikke så viktig. Lenke til kommentar
frg Skrevet 22. april 2005 Forfatter Del Skrevet 22. april 2005 Faktisk så skjønte jeg hva du mente. Takk for hjelpen til deg og alle andre som har bidratt. Lenke til kommentar
prebenl Skrevet 25. april 2005 Del Skrevet 25. april 2005 Er det forresten noen som vet om det finnes praktiske anvendelser av å caste int eller double-variabler til adresser? Synes det høres helt unyttig ut, men så er jeg ingen enterprise-programmerer heller da.. Lenke til kommentar
JBlack Skrevet 25. april 2005 Del Skrevet 25. april 2005 Sansynligvis mest nyttig når man programmer hardware direkte (embedded devices). Lenke til kommentar
Atypic Skrevet 6. mai 2005 Del Skrevet 6. mai 2005 Casten blir jo brukt litt her og der. int *a = (int *)100; // Peker "a" til den absolutte adressen 100 Dette er også lovlig: a = (int*) 100; a++ ; // a er nå 104. MS-DOS var flittig bruker av absolutte adresser. ( For de som programmerte på den tiden så skjønner dere sikkert hvorfor tallet 100). For andre: MS-DOS forventet alltid at "starten" på et program alltid ville ligge på den absolutte minneadressen 0x100h. (256 i 10-base). Ellers er det mye brukt i hardware-instruksjoner. Hvor starter en prosessor når den blir satt spenning på? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå