Markører i C er nemme og sjove at lære. Nogle C-programmeringsopgaver udføres lettere med markører, og andre opgaver, såsom dynamisk hukommelsestildeling, kan ikke udføres uden brug af markører. Så det bliver nødvendigt at lære henvisninger til at blive en perfekt C-programmør. Lad os begynde at lære dem i enkle og nemme trin.
Som du ved, er hver variabel en hukommelsesplacering, og hver hukommelsesplacering har sin definerede adresse, som kan tilgås med ampersand (&) operator, der angiver en adresse i hukommelsen. Overvej følgende eksempel, der udskriver adressen på de definerede variabler –
Når ovenstående kode kompileres og udføres, producerer den følgende resultat –
Address of var1 variable: bff5a400Address of var2 variable: bff5a3f6
Hvad er markører?
En markør er en variabel, hvis værdi er adressen på en anden variabel, dvs. direkte adresse af hukommelsesplaceringen. Som enhver variabel eller konstant skal du erklære en markør, før du bruger den til at gemme en variabeladresse. Den generelle form for en pointervariabelerklæring er –
type *var-name;
Her er typen markørens basistype; det skal være en gyldig C-datatype, og var-name er navnet på markørvariablen. Stjernen *, der bruges til at erklære en markør, er den samme stjerne, der bruges til multiplikation. I denne erklæring bruges stjernen imidlertid til at betegne en variabel som en markør. Se på nogle af de gyldige markørerklæringer –
int *ip; /* pointer to an integer */double *dp; /* pointer to a double */float *fp; /* pointer to a float */char *ch /* pointer to a character */
Den aktuelle datatype for værdien af alle markører, hvad enten det er heltal, float, tegn eller på anden måde , er det samme, et langt hexadecimalt tal, der repræsenterer en hukommelsesadresse. Den eneste forskel mellem markører af forskellige datatyper er datatypen for den variabel eller konstant, som markøren peger på.
Sådan bruges markører?
Der er et par vigtige handlinger, hvilket vi vil gøre ved hjælp af markører meget ofte. (a) Vi definerer en markørvariabel, (b) tildeler en variators adresse til en markør og (c) får endelig adgang til værdien på den tilgængelige adresse i markørvariablen. Dette gøres ved at bruge unary operator *, der returnerer værdien af variablen placeret på den adresse, der er angivet af dens operand. I følgende eksempel bruges disse operationer –
Når ovenstående kode kompileres og udføres, producerer den følgende resultat –
Address of var variable: bffd8b3cAddress stored in ip variable: bffd8b3cValue of *ip variable: 20
NULL-pegere
Det er altid en god praksis at tildele en NULL-værdi til en markørvariabel, hvis du ikke har en nøjagtig adresse, der skal tildeles. Dette gøres på tidspunktet for variabel erklæring. En markør, der er tildelt NULL, kaldes en nulmarkør.
NULL-markøren er en konstant med en værdi på nul defineret i flere standardbiblioteker. Overvej følgende program –
#include <stdio.h>int main () { int *ptr = NULL; printf("The value of ptr is : %x\n", ptr ); return 0;}
Når ovenstående kode er kompileret og udført, producerer den følgende resultat –
The value of ptr is 0
I de fleste operativsystemer har programmer ikke adgang til hukommelse på adresse 0, fordi den hukommelse er reserveret af operativsystemet. Hukommelsesadressen 0 har imidlertid særlig betydning; det signalerer, at markøren ikke er beregnet til at pege på en tilgængelig hukommelsesplacering. Men ved en konvention antages det, at hvis en markør indeholder nulværdien (nul), det antages at pege på intet.
For at kontrollere om der er en nulmarkør, kan du bruge en “if” -sætning som følger –
if(ptr) /* succeeds if p is not null */if(!ptr) /* succeeds if p is null */
Pointer i detaljer
Pointer har mange, men nemme begreber, og de er meget vigtige for C-programmering. Følgende vigtige pointerkoncepter skal være klare for enhver C-programmør –
Sr.Nr. | Koncept & Beskrivelse |
---|---|
1 | Pointer aritmetik
Der er fire aritmetiske operatorer, der kan bruges i markører: ++, -, +, – |
2 | Array of pointers
Du kan definere arrays til at indeholde et antal pegepinde. |
3 | Markør til pointer
C giver dig mulighed for at have markør på en markør og så videre. |
4 | Videresendelse af markører til funktioner i C
Passing et argument med henvisning eller adresse muliggør, at det sendte argument kan ændres i den kaldende funktion af den kaldte funktion. |
5 | Return pointer fra funktioner i C
C tillader en funktion også at returnere en markør til den lokale variabel, statiske variabel og dynamisk tildelte hukommelse. |