Markører i C Programmering med eksempler
En markør er en variabel, der gemmer adressen på en anden variabel. I modsætning til andre variabler, der indeholder værdier af en bestemt type, holder markøren adressen på en variabel. For eksempel holder en heltalsvariabel (eller du kan sige gemmer) en heltalsværdi, men en heltalsmarkør indeholder adressen på en heltalsvariabel. I denne vejledning vil vi diskutere markører i C-programmering ved hjælp af eksempler.
Før vi diskuterer markører i C, lad os tage et simpelt eksempel for at forstå, hvad vi mener med adressen på en variabel.
Et simpelt eksempel for at forstå, hvordan man får adgang til adressen på en variabel uden pegepinde?
I dette program har vi et variabelt antal af int-typen. Værdien af num er 10, og denne værdi skal gemmes et eller andet sted i hukommelsen, ikke? Der tildeles et hukommelsesrum til hver variabel, der indeholder værdien af denne variabel, dette hukommelsesrum har en adresse. For eksempel bor vi i et hus, og vores hus har en adresse, som hjælper andre mennesker med at finde vores hus. På samme måde som værdien af variablen lagres i en hukommelsesadresse, hvilket hjælper C-programmet med at finde den værdi, når det er nødvendigt.
Så lad os sige, at adressen, der er tildelt variabel num, er 0x7fff5694dc58
, hvilket betyder, at den værdi, vi ville tildele num, skal gemmes på placeringen: 0x7fff5694dc58
. Se diagrammet nedenfor.
Output:
Value of variable num is: 10Address of variable num is: 0x7fff5694dc58
Et simpelt eksempel på markører i C
Dette program viser, hvordan en markør deklareres og bruges. Der er flere andre ting, vi kan gøre med henvisninger, vi har diskuteret dem senere i denne vejledning. For øjeblikket skal vi bare vide, hvordan man forbinder en markør til adressen på en variabel.
Vigtigt at bemærke er: Datatypen til markøren og variablen skal matche, en int-pointer kan indeholde adressen til int-variablen, ligesom en pointer, der er deklareret med float-datatype, kan indeholde adressen på en float-variabel. I eksemplet nedenfor er markøren og variablen begge af int-type.
Output:
Address of variable num is: 0x7fff5694dc58
C-markører – Operatører, der bruges med markører
Lad os diskutere operatorerne & og *, der bruges med markører i C.
“Adresse til” (&) Operatør
Vi har allerede set i det første eksempel, at vi kan vise adressen på en variabel ved hjælp af ampersand Jeg har brugt & num til at få adgang til adressen på variablen num. Operatoren & er også kendt som “Adresse” til operatøren.
printf("Address of var is: %p", &num);
Bemærk:% p er et formatspecifikator, der bruges til at vise adressen i hex-format.
Nu hvor du ved, hvordan du får adressen på en variabel, men hvordan gemmes denne adresse i en anden variabel? Det er her, der kommer ind i billedet. Som nævnt i begyndelsen af denne vejledning bruges markører i C-programmering til at holde adressen på en anden variabel.
Markøren er ligesom en anden variabel, den største forskel er, at den gemmer adressen på en anden variabel i stedet for en værdi.
“Værdi ved adresse” (*) Operatør
* Operatøren er også kendt som Værdi ved adresseoperatør.
Sådan erklæres en markør ?
Ovenstående er et par eksempler på markørerklæringer. Hvis du har brug for en markør til at gemme adressen på heltalets variabel, skal markørens datatype være int. Samme tilfælde er det med de andre datatyper.
Ved at bruge * -operatøren kan vi få adgang til værdien af en variabel gennem en markør.
For eksempel:
double a = 10;double *p;p = &a;
* p ville give os værdien af variablen a. Følgende udsagn viser 10 som output.
printf("%d", *p);
Tilsvarende hvis vi tildeler en værdi til * pointer som denne:
*p = 200;
Det ville ændre værdien af v ariabel a. Erklæringen ovenfor ændrer værdien af a fra 10 til 200.
Eksempel på markør, der viser brugen af & og *
Output :
Value of variable var is: 10Value of variable var is: 10Address of variable var is: 0x7fff5ed98c4cAddress of variable var is: 0x7fff5ed98c4cAddress of pointer p is: 0x7fff5ed98c50
Lad os tage nogle flere eksempler for at forstå det bedre –
Lad os sige, at vi har en char-variabel ch og en markør ptr, der indeholder adressen på ch.
char ch="a";char *ptr;
Læs værdien af ch
printf("Value of ch: %c", ch);orprintf("Value of ch: %c", *ptr);
Ændr værdien af ch
ch = "b";or*ptr = "b";
Ovenstående kode erstatter værdien a med b .
Kan du gætte output fra følgende C-program?
Output:
Address of var is: 0x7fff5d027c58Address of var is: 0x7fff5d027c58Value of var is: 10Value of var is: 10Value of var is: 10Value of pointer p is: 0x7fff5d027c58Address of pointer p is: 0x7fff5d027c50
Flere emner på markører
1) Markør til markør – En markør kan pege på en anden markør (hvilket betyder, at den kan gemme adressen på en anden markør), sådanne markører er kendt som dobbeltmarkør ELLER markør til markør.
2) Videregivelse af markører til funktion – Markører kan også sendes som et argument til en funktion, ved hjælp af denne funktion kan en funktion kaldes som reference, såvel som en matrix kan sendes til en funktion under opkald.
3) Funktionsmarkører – En funktionsmarkør er ligesom en anden markør, den bruges til at gemme adressen på en funktion. Funktionsmarkør kan også bruges til at ringe til en funktion i C-program.