Pointers er afgørende for mange C-programmer, men de kan være svære at forstå. Gennemgå deres syntaks og hvordan de arbejder med praktiske eksempler.

Pointere er et væsentligt aspekt af C-programmering, som du skal have en god forståelse af for at bruge sproget effektivt. De hjælper med effektiv hukommelsesstyring, videregivelse af data ved reference, håndtering af arrays og strenge og mere. De kræver dog omhyggelig brug for at undgå fejl.

Udforsk detaljerne i C pointere, fra forståelse af hukommelse og adresser til at mestre pointer-aritmetik.

Hukommelse og adresser

Hukommelse – bruges ofte som en stenografi for RAM (Random Access Memory)— er lagerpladsen i en computer, der indeholder de data og instruktioner, som et program skal køre. Det fungerer som arbejdsområdet for dit program. Den mindste hukommelsesenhed er typisk en byte, som er lig med otte bit.

Hver hukommelsesplacering har en unik adresse og kan gemme en forskellig mængde data afhængigt af computeren. Når du erklærer en variabel i C, tildeler du den implicit en hukommelsesplacering til at gemme dens data. Tænk på det som et hus, der har en unik adresse, som du kan bruge til at finde det.

instagram viewer

Forestil dig din computers hukommelse som en sekvens af lagerceller, der hver indeholder en byte af data. Lad os sige, at der er to variable, x og y, i et C-program:

int x = 5;
int y = 10;

I hukommelsen kan det se sådan ud:

Adresse

Data

1000

5

1004

10

Her gemmer separate hukommelsessteder disse variable. De data, der x repræsenterer ligger på hukommelsesadresse 1000, mens y's data optager hukommelsesadresse 1004.

At forstå hukommelse og adresser er afgørende, når du arbejder med pointere, fordi de er variabler, der gemmer hukommelsesadresser. De lader dig få adgang til og manipulere data, der er gemt på en bestemt hukommelsesplacering.

Erklæring og initialisering af pointere i C

Før du kan ændre data ved hjælp af pointere i C, skal du deklarere og initialisere dem.

Erklæring

For at erklære en markør skal du angive den datatype, den peger på, efterfulgt af en stjerne (*) og derefter markørens navn. For eksempel:

int *ptr;

Her, int *ptr erklærer en pointer navngivet ptr der kan gemme hukommelsesadressen for et heltal.

Initialisering

Efter erklæringen skal du initialisere den med den hukommelsesadresse, den vil pege på. Du kan initialisere det sådan:

int x = 5;
int *ptr = &x;

I denne erklæring er & operator henter adressen på x-variablen. Koden siger i det væsentlige "ptr er en variabel, den gemmer hukommelsesplaceringen af ​​en heltalværdi, og denne placering er hvor som helst x refererer til."

Nu, ptr indeholder adressen på heltalsvariablen x. For eksempel:

Variabel

Adresse

Værdi

x

1000

5

ptr

1000

Pointere i C gemmer ikke kun adressen på en variabel, men har også deres egen unikke adresse i computerens hukommelse.

Derhenvise pointere

At derhenvise en C-peger betyder at få adgang til værdien, der er lagret på hukommelsesadressen, som pegeren peger på.

Antag at du har en pointer, int *ptr, der peger på en heltalsvariabel, og den variabel har en værdi på 10. For at få adgang til værdien via markøren, skal du bruge stjernen (*) operatør:

int x = 10;

int *ptr = &x; // ptr points to the address of x

int value = *ptr; // Dereferencing ptr to get the value

Dette eksempel bruger ptr variabel for at hente værdien på den hukommelsesadresse, den peger på. Så, værdi har nu værdien 10, som er indholdet af x.

Pointer Aritmetik

Pointer-aritmetik er en kraftfuld funktion i C, især nyttig til at arbejde med arrays og strenge (som er arrays af tegn). Det lader dig udføre aritmetiske operationer på pointere for at flytte rundt i hukommelsen.

Her er et eksempel, der viser, hvordan du kan bruge det.

Begynd med at erklære en matrix af heltal:

int numbers[] = {10, 20, 30};

Deklarer en pointer til en int og tildel hukommelsesplaceringen for talarrayet til den:

int *ptr = numbers;

Du behøver ikke at bruge "&"-operatoren her, fordi tal allerede implicit er en pointertype.

Ptr-variablen peger nu på det første element i arrayet:

printf("%d\n", *ptr); // 10

Du kan flytte markøren til det tredje element i arrayet ved at øge det med 2:

ptr += 2;
printf("%d\n", *ptr); // 30

Du kan flytte markøren bagud ved at trække fra den:

ptr--;
printf("%d\n", *ptr); ;// 20

Pointer-aritmetik er især nyttig til at navigere i arrays og arbejde med dynamisk hukommelsesallokering.

Pointere og funktioner i C

hvis du forstå, hvordan funktioner fungerer i C-programmering, så er du godt i gang med at bruge funktionspointere. Her er nogle måder, du kan bruge dem på.

Funktionsvisere

Du kan deklarere og bruge funktionsmarkører til at bruge funktioner dynamisk, ligesom enhver anden værdi. Dette er især nyttigt til tilbagekald og dynamisk funktionsudførelse.

int (*operation)(int, int); // Declare a function pointer
operation = add; // Pointer to an add function
int result = operation(5, 3); // Call the function through the pointer

Denne kode erklærer en funktionsmarkør ved navn operation der kan pege på en funktion, der tager to heltal og returnerer et. Den tildeler (en pointer til) den tilføje funktion til operation. Den bruger derefter operationsvariablen til indirekte at kalde tilføje (5, 3).

Går forbi reference

Pointere giver dig mulighed for at sende argumenter ved at henvise til funktioner, så du kan ændre de originale data i funktionen. Dette er afgørende for funktioner, der skal ændre værdien af ​​en variabel uden for deres omfang.

voidmodifyValue(int *x){
*x = 42; // Modifies the value of x in the calling code
}

Det ændre Værdi funktion ændrer værdien af ​​det argument, som den kaldende kode leverer til den, og sætter den til 42.

Dynamisk hukommelsestildeling

Funktioner kan returnere pointere til dynamisk allokeret hukommelse. Dette er almindeligt, når du skal oprette og returnere ubegrænsede datastrukturer som arrays eller sammenkædede lister. Det bliver du nødt til have et godt greb om stack og heap hukommelse at bruge det.

int *createArray(intsize){
int *arr = (int *)malloc(size * sizeof(int));
return arr;
}

Denne kode definerer en funktion, skabeArray, der tager et heltal, størrelse, som input. Inde i funktionen allokerer den dynamisk hukommelse til et heltalsarray af den specificerede størrelse vha malloc. Efter initialisering af arrayet returnerer det en pointer til dette nyoprettede array.

Almindelige anvendelser

Pointere er essentielle i C af flere grunde, og de er hvad skelne C fra andre programmeringssprog som Python. Her er nogle almindelige anvendelser:

  • Dynamisk hukommelsestildeling
  • Array manipulation
  • Går forbi reference
  • Datastrukturer
  • Ressourcestyring

At forstå disse almindelige anvendelser af pointere kan forbedre dine C-programmeringsfærdigheder. Øv nogle af disse for at forbedre din forståelse af pointer.

Øv dig i at bruge pointere i C-programmering

At mestre pointere i C-programmering er en værdifuld færdighed, der gør dig i stand til effektivt at administrere hukommelse, manipulere data og udføre avancerede operationer. Øvelse og færdigheder med pointere vil i høj grad forbedre din evne til at skabe robuste og ressourceeffektive C-programmer.