Gå til innhold

Ny og ustø i C. Pekere og hardware adresser?


Anbefalte innlegg

Hei hei!

Jeg er fullstendig nebbete i C, har ikke holdt på mer enn et par uker, men jeg har skrevet VB i litt over 4 år :whistle: Og som forventet er det en del ting å lære seg på nytt.

 

En ting som jeg stusser fært på er pointere. Vel, det vil si, jeg har skjønt dealen med at de peker til minneadresser og jeg innser at dette er veldig praktisk og alt mulig, men et spørsmål kommer tilbake.

Hvis de peker til minne adresser, så betyr vel det EGENTLIG at de peker til hardware adressen? correct me if i'm worng. Så burde det da ikke være mulig for c programmer å lese andre adresser også?

si at jeg vil lese port 888, som er parallellporten (synes jeg å huske).

 

hvordan kan jeg lage en pointer som peker dit?

 

hvordan kan jeg lage en pointer som peker til en adresse jeg skriver inn?

Lenke til kommentar
Videoannonse
Annonse

Parallel port:

http://www.pchell.com/hardware/irqs.shtml#I/O%20Addresses (LPT1)

 

De to siste spørsmålene er besvart i en tidligere tråd som ble spurt like før din.

 

Generellt sett kan ikke en prossess aksessere minne utenfor sitt eget område ("protected mode" @ google), man bruker i stedet OS-spesifike funksjonskall for å få tilgang til maskinvare. Protected mode er en god ting.

 

Linux:

http://www.tldp.org/HOWTO/IO-Port-Programming.html

(sjekk også man-sidene og info-sidene)

http://people.redhat.com/twaugh/parport/html/ppdev.html

http://www.xml.com/ldd/chapter/book/

 

Win32:

http://msdn.microsoft.com/library/default....s_resources.asp

Endret av søppel
Lenke til kommentar
aaahaaa, hmmm, vel beklager at jeg ikke sjekka det før jeg skrev ny post i alle fall.

og takk for raskt svar =)

menneh, blir det da
int* i = reinterpret_cast<int*>(0xadresse) ?

da peker i til "adresse"?

og blir i nå en pointer eller en vanlig variabel, siden det er "int* i" og ikke "int *i" som jeg er vant til.
Husk at jeg er helt nub er da, hehe :D
Lenke til kommentar
menneh, blir da

int* i = reinterpret_cast<int*>(0xadresse)

peker i til "adresse"?

Ja, eller man sier i er en peker til en int, hos adressen "adresse", der peker til int er typen.

 

og blir i nå en pointer eller en vanlig variabel, siden det er "int* i" og ikke "int *i" som jeg er vant til.

	char* c1;
char *c2;
char * c3;
char  *   c4;

Alle disse gir variabler med akkurat samme type. Så de er like, men i C++ er det vanlig stil å ha * innat typen, altså slik:

int* a;
char* b;
MinType* c;

 

Edit:

..mens i C er det vanlig å ha * innat variabelen, altså slik:

int *a;
char *b;
MinType *c;

 

Jeg foretrekker i hvertfall helt klart "C++-stilen".

Endret av søppel
Lenke til kommentar

Nå sitter jeg litt fast her....

char* x = "En string" går an, men

char x = "En string" går ikke an,

fordi char bare er en character...

Hmm...

Jeg trodde char* var det samme som char[], altså en string(i C), selv om * betyr peker (jeg har lurt litt på den)...

Kanskje litt dårlig forklaring, men jeg tror dere sjønner hva jeg mener..

Lenke til kommentar

char* og char[] er ikke det samme (les: er det samme)

char[] er er char array og char* er en peker til en char (som kan være det første elementet i en array).

du kan bruke de på samme måte, men char* kan peke til nye arrayer osv.

 

char* foo = "en string";

char foo[] = "en string";

 

char* foo = "en string"; skal egentlig være const char* siden den peker til "en string" som er en string literal i minnet som du ikke kan forandre. mens char foo[] = "en string"; kan du forandre siden "en string" blir kopiert til arrayen

Endret av saboi
Lenke til kommentar

innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat,

 

There .. da kan jeg det utenat.

 

Omtrent like on-topic dette, ellerhva?

 

(Se om du finner noen feil i noen av de eldre postene mine også da.)

Endret av søppel
Lenke til kommentar
innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat, innat,

 

There .. da kan jeg det utenat.

 

Omtrent like on-topic dette, ellerhva?

 

(Se om du finner noen feil i noen av de eldre postene mine også da.)

[OFFTOPIC SVADA]

Det kan du være bombesikker på. Stå på, skriv som du vil!

[/OFFTOPIC SVADA]

 

EDIT: Glemte offtopic svada taggen...

 

EDIT2: Vel, en peker til char* peker ikke på flere chars, men programmet fortsetter å lese fra minnet til det treffer på slemmingen NULL.

Det lærte jeg da jeg skrev en bitteliten bootloader for noen dager siden.

Endret av kr1570ffz0r
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...