Både pegere og referencer er de mest kraftfulde funktioner i C og C ++, som gør det muligt for programmerere at manipulere hukommelsesadresse direkte for effektiv hukommelsesadministration.
Begge er variabler, der bruges til at henvise til andre objekter indirekte, og de deler nogle fælles træk på overfladen. Selvom de deler mange fælles kapaciteter, er de også meget komplekse at forstå.
En markør er en variabel, der indeholder hukommelsesadressen til en anden variabel, mens en henvisning er som en pointer, der indirekte kan henvises til en anden variabel..
De fleste programmerere ser ud til at udvikle en vis forståelse for, hvornår de skal bruge pegere, og hvornår de skal bruge referencer, men de støder ofte på problemer, hvis løsning synes uklar.
Så for bedre at forstå filosofien, lad os forstå forskellen mellem de to.
Hver variabel er en hukommelsesplacering, der er defineret af dens adresse og er parret med en identifikator, der indeholder en eller anden værdi, der kan ændres i løbet af et program. Enkelt sagt er variabel et symbol, der repræsenterer en mængde.
En markør er en variabel, der indeholder hukommelsesadressen til en anden variabel. En markør er intet andet end en adresse, og en variabel, der gemmer en markør kaldes en markørvariabel.
Tanken er at bruge identifikatorer (eller navne) i stedet for numeriske adresser for at lette programmeringsbyrden og dermed mindske kompleksiteten af programmer. Da disse adresser henviser til faktiske placeringer i computerhukommelsen, kan pegepinde bruges til at få adgang til og manipulere indhold, der er gemt i hukommelsen.
Som enhver variabel eller konstant skal pointer angives for deres typer. Da pegepinde indeholder hukommelsesadresser, der hører til en separat datatype, skal de deklareres ved hjælp af pegere, før du kan arbejde med dem. Den generelle form for en markørerklæring er:
Data_type * var-name;
Her er "Data_type" basistypen for markøren, og "var-name" er pointervariablen. Stjernen (*) her bruges til at erklære markøren, der udpeger variablen "var-navn" som en markørvariabel.
int * p; // heltalemarkøren
flyde * x; // float-markør
Her peger variablen “p” på en heltal datatype, der er erklæret som “int”, der henviser til datatypen for variablen. På lignende måde henviser "float" i det andet eksempel til datatypen for variablen "x", som faktisk er betegnet som en markør til en flytende punktvariabel.
En reference er som en markør med indirekte adgang til en variabel. Det er som et alias for en anden variabel, hvilket betyder, at det bare er et andet navn på en allerede eksisterende variabel.
Det giver programmerere mulighed for at oprette et andet navn til den variabel, som de kan bruge til at manipulere det indhold, der er gemt i den variabel. Det er en enhed, der er et alias for en anden variabel, og den har den samme adresse som den originale variabel. Det understøtter pass-by-reference, der fungerer som funktionsformelle parametre, og når den først er defineret til at henvise til en variabel, kan den ikke genoptages, hvilket betyder, at den ikke kan henvises til en anden variabel.
I modsætning til pointere, har de ikke brug for dereferencing-operatør for at få adgang til værdien; faktisk kan de bruges som normale variabler.
int i;
int & ri = i;
Her er "ri" en heltalreference initialiseret til "i". Det erklærer "ri" som et objekt af typen "henvisning til int". En reference kan let forveksles med en markør, der er en uafhængig variabel, hvis adresseværdier ikke kan tildeles igen, når den er oprettet.
- Begge giver næsten lignende muligheder med hensyn til brugervenlighed, og sondringen kan være vanskelig. En markør er bare en variabel, der gemmer hukommelsesadressen til en anden variabel, mens en henvisning er som et alias for en allerede eksisterende variabel. Det opretter et andet navn til en variabel, der kan bruges til at ændre det indhold, der er gemt i den variabel.
- En markør er som enhver anden variabel, der gemmer et stykke data. I modsætning til andre variabler gemmer markørvariabler hukommelsesadresser i stedet for værdier. Der markeres en markør ved hjælp af indirekte-operatøren * for at få adgang til hukommelsesplacering for den variabel, den peger på. På den anden side behøver en reference ikke nogen dereferencing-operatør for at få adgang til værdien.
- I modsætning til pointer, der til enhver tid kan initialiseres, skal referencer tildeles ved initialisering. Du kan få adgang til pointere direkte, mens referencer ikke er direkte tilgængelige.
- En markørvariabel har sin egen placering i hukommelsen, hvilket betyder, at når du erklærer en markør, angiver du en placering, der er en hukommelsesadresse, der er tildelt hver hukommelseenhed. Markørvariablen har den samme adresse, hvor den gemmes i hukommelsen. En referencevariabel er på den anden side et alias for en anden variabel, hvorved adressen til referencevariablen tages.
- NULL repræsenterer slutningen af listen, hvilket betyder, at den angiver, at værdien er ukendt, og den specificerer, at variablen ikke har et gyldigt adresserum. NULL-værdi kan tildeles direkte til en markørvariabel, hvilket antyder, at den ikke peger overalt, mens NULL ikke kan tildeles en referencevariabel.
Henvisere har altid været blandt de foretrukne diskussionsemner for C / C ++ -programmører, indtil referencer kom til billedet. Referencer ligner noget som pointere, men har en rimelig andel fordele og ulemper i sammenligning. Mens begge kan bruges til at ændre lokale variabler af en funktion inden for en anden funktion, har de deres forskelle. Begge er kraftfulde funktioner i C og C ++, som giver dig mulighed for direkte at manipulere hukommelse, men med et par undtagelser. En markør holder hukommelsesadressen til en variabel, mens en reference kun er et alias for en anden variabel.