Pekare är avgörande för många C-program, men de kan vara svåra att förstå. Gå igenom deras syntax och hur de fungerar med praktiska exempel.

Pekare är en viktig aspekt av C-programmering som du behöver en god förståelse för för att använda språket effektivt. De hjälper till med effektiv minneshantering, överföring av data genom referens, hantering av arrayer och strängar och mer. Men de kräver noggrann användning för att undvika fel.

Utforska detaljerna i C-pekare, från att förstå minne och adresser till att bemästra pekares aritmetik.

Minne och adresser

Minne – används ofta som en stenografi för RAM (Random Access Memory)— är lagringsutrymmet i en dator som innehåller data och instruktioner som ett program behöver för att köra. Den fungerar som arbetsytan för ditt program. Den minsta minnesenheten är vanligtvis en byte, vilket är lika med åtta bitar.

Varje minnesplats har en unik adress och kan lagra olika mängder data beroende på dator. När du deklarerar en variabel i C tilldelar du den implicit en minnesplats för att lagra dess data. Se det som ett hus, som har en unik adress som du kan använda för att hitta det.

instagram viewer

Föreställ dig din dators minne som en sekvens av lagringsceller, som var och en innehåller en byte med data. Låt oss säga att det finns två variabler, x och y, i ett C-program:

int x = 5;
int y = 10;

I minnet kan det se ut så här:

Adress

Data

1000

5

1004

10

Här lagrar separata minnesplatser dessa variabler. Uppgifterna som x representerar finns på minnesadressen 1000, medan ys data upptar minnesadress 1004.

Att förstå minne och adresser är avgörande när du arbetar med pekare eftersom de är variabler som lagrar minnesadresser. De låter dig komma åt och manipulera data lagrade på en specifik minnesplats.

Deklarera och initiera pekare i C

Innan du kan ändra data med hjälp av pekare i C måste du deklarera och initiera den.

Deklaration

För att deklarera en pekare anger du vilken datatyp den pekar på, följt av en asterisk (*) och sedan pekarens namn. Till exempel:

int *ptr;

Här, int *ptr förklarar en pekare namngiven ptr som kan lagra minnesadressen för ett heltal.

Initialisering

Efter deklarationen bör du initiera den med minnesadressen den kommer att peka på. Du kan initiera det så här:

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

I denna förklaring anges & operatorn hämtar adressen till variabeln x. Koden säger i huvudsak "ptr är en variabel, den lagrar minnesplatsen för ett heltalsvärde, och den platsen är varhelst x för närvarande refererar till."

Nu, ptr innehåller adressen till heltalsvariabeln x. Till exempel:

Variabel

Adress

Värde

x

1000

5

ptr

1000

Pekare i C lagrar inte bara adressen till en variabel utan har också sin egen unika adress i datorns minne.

Avvikande pekare

Att avreferensera en C-pekare innebär åtkomst till värdet lagrat på minnesadressen som pekaren pekar på.

Anta att du har en pekare, int *ptr, som pekar på en heltalsvariabel och den variabeln har värdet 10. För att komma åt värdet genom pekaren använder du asterisken (*) operatör:

int x = 10;

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

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

Detta exempel använder ptr variabel för att hämta värdet på minnesadressen den pekar på. Så, värde har nu värdet 10, vilket är innehållet i x.

Pekararitmetik

Pekarritmetik är en kraftfull funktion i C, särskilt användbar för att arbeta med arrayer och strängar (som är arrayer av tecken). Den låter dig utföra aritmetiska operationer på pekare för att flytta runt i minnet.

Här är ett exempel som visar hur du kan använda det.

Börja med att deklarera en matris med heltal:

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

Deklarera en pekare till en int och tilldela minnesplatsen för nummermatrisen till den:

int *ptr = numbers;

Du behöver inte använda operatorn "&" här eftersom siffror redan implicit är en pekare.

Variabeln ptr pekar nu på det första elementet i arrayen:

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

Du kan flytta pekaren till det tredje elementet i arrayen genom att öka den med 2:

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

Du kan flytta pekaren bakåt genom att subtrahera från den:

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

Pekarritmetik är särskilt användbart för att navigera i arrayer och arbeta med dynamisk minnesallokering.

Pekare och funktioner i C

Om du förstå hur funktioner fungerar i C-programmering, då är du på god väg att använda funktionspekare. Här är några sätt du kan använda dem.

Funktionspekare

Du kan deklarera och använda funktionspekare för att använda funktioner dynamiskt, precis som alla andra värden. Detta är särskilt användbart för callbacks och dynamisk funktionsexekvering.

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

Denna kod deklarerar en funktionspekare som heter drift som kan peka på en funktion som tar två heltal och returnerar ett. Den tilldelar (en pekare till) den Lägg till funktion till drift. Den använder sedan operationsvariabeln för att indirekt anropa lägg till (5, 3).

Går förbi referens

Pekare låter dig skicka argument genom att referera till funktioner, vilket gör att du kan modifiera originaldata i funktionen. Detta är avgörande för funktioner som behöver ändra värdet på en variabel utanför deras räckvidd.

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

De modifieraVärde funktionen ändrar värdet på det argument som den anropande koden tillhandahåller den och sätter den till 42.

Dynamisk minnesallokering

Funktioner kan returnera pekare till dynamiskt allokerat minne. Detta är vanligt när du behöver skapa och returnera obegränsade datastrukturer som arrayer eller länkade listor. Du måste ha ett bra grepp om stack- och heapminne att använda den.

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

Denna kod definierar en funktion, skapaArray, som tar ett heltal, storlek, som input. Inuti funktionen allokerar den dynamiskt minne för en heltalsarray av den angivna storleken med hjälp av malloc. Efter initialisering av arrayen returnerar den en pekare till denna nyskapade array.

Vanliga användningsområden

Pekare är viktiga i C av flera anledningar, och de är vad skilja C från andra programmeringsspråk som Python. Här är några vanliga användningsområden:

  • Dynamisk minnesallokering
  • Array-manipulation
  • Går förbi referens
  • Data struktur
  • Resurshantering

Att förstå dessa vanliga användningsområden för pekare kan förbättra dina C-programmeringsfärdigheter. Träna på några av dessa för att förbättra din förståelse av tips.

Öva på att använda pekare i C-programmering

Att bemästra pekare i C-programmering är en värdefull färdighet som gör att du effektivt kan hantera minne, manipulera data och utföra avancerade operationer. Övning och färdighet med pekare kommer att avsevärt förbättra din förmåga att skapa robusta och resurseffektiva C-program.