Verschil tussen array en aanwijzer

Schrijver: Laura McKinney
Datum Van Creatie: 1 April 2021
Updatedatum: 15 Kunnen 2024
Anonim
Difference between arrays and pointers in C
Video: Difference between arrays and pointers in C

Inhoud


Er is een nauwe relatie tussen array en pointer. De aanwijzer kan worden gebruikt om toegang te krijgen tot de array-elementen, toegang tot de hele array met behulp van aanwijzerberekeningen, maakt de toegang sneller. Er is een fundamenteel verschil tussen een pointer en een array, dat wil zeggen, een array is een verzameling variabelen van hetzelfde gegevenstype, terwijl de pointer een variabele is die het adres van een andere variabele opslaat. Er zijn enkele andere verschillen tussen een array en een pointer die hieronder worden besproken in de vergelijkingstabel.

  1. Vergelijkingstabel
  2. Definitie
  3. Belangrijkste verschillen
  4. Gevolgtrekking

Vergelijkingstabel

Basis voor vergelijkingreeksWijzer
Verklaring// In C ++
typ var_name;
// In Java.
typ var-naam;
var_name = nieuw type;
// In C ++
typ * var_name;
WerkenSlaat de waarde op van de variabele van het homogene datatype.Sla het adres op van een andere variabele van hetzelfde datatype als het datatype van de pointervariabelen.
GeneratieEr kan een reeks aanwijzingen worden gegenereerd.Er kan een aanwijzer naar een array worden gegenereerd.
Java-ondersteuningOndersteuning van het concept van array.Ondersteunt geen verwijzingen.
opslagruimteEen normale array slaat waarden van variabele op en pointer array slaat het adres van variabelen op.Aanwijzers zijn speciaal ontworpen om het adres van variabelen op te slaan.
CapaciteitEen array kan het aantal elementen opslaan, vermeld in de grootte van de arrayvariabele. Een pointervariabele kan het adres van slechts één variabele tegelijk opslaan.


Definitie van Array

Een array is de verzameling elementen van hetzelfde gegevenstype en al deze elementen worden aangeduid met een gemeenschappelijke naam, die de naam is van een arrayvariabele. U kunt toegang krijgen tot een bepaald array-element door toegang te krijgen tot de specifieke index van die array waar dat element is opgeslagen. Arrays kunnen een eendimensionale array, een tweedimensionale array of een multidimensionale array zijn. Een reeks aanwijzers kan ook worden gegenereerd, d.w.z. een reeks die alle variabelen bevat als pointervariabele. In ‘C ++’ worden de arrays statisch toegewezen, terwijl in ‘Java’ de arrays dynamisch worden toegewezen.

// Typ in C ++ var_name; // In Java. typ var-naam; var_name = nieuw type;

Hier geeft het 'type' het gegevenstype van een arrayvariabele aan, 'var_name' geeft de naam aan de arrayvariabele aan, 'size' geeft de capaciteit van de arrayvariabele aan, dwz hoeveel elementen van 'type' in die arrayvariabele kunnen worden opgeslagen . Er zijn twee methoden om toegang te krijgen tot een array, eerste ‘pointer arithmetic’ en tweede ‘array indexing’, waarvan ‘pointer arithmetic’ sneller is.


// toegang met behulp van pointer arithmetic Void display_array (int * S) {while (* s) {cout (<< "waarde is" << * s); * S ++; }}

Het gebruik van ‘pointer arithmetic’ zou sneller werken in vergelijking met ‘array-indexering’, d.w.z. toegang krijgen tot de array-variabele met behulp van de index. Als u een reeks verwijzingen naar een functie moet doorgeven, kunt u dit doen met dezelfde methode die u gebruikt om een ​​normale reeks door te geven, d.w.z. direct de functie met de naam van de reeks aanroepen, zonder enige index.

Laten we het met het voorbeeld begrijpen

// De reeks aanwijzers declareren. int * p;

Hier laat het zien dat ‘p’ een array van het type integer is, het bevat het adres van 10 variabelen van het type integer. Laten we de bovenstaande pointer array doorgeven aan een functieweergave ().

weergave (p); // Roep het functiedisplay op. void display (int * d) {// Functie die de pointer array opnieuw inschrijft. voor (int i = 0; i <10; i ++) {cout << ("index" <

Deze functie toont de waarden, aanwezig in de variabelen, waarvan de adressen opeenvolgend worden opgeslagen in deze pointer array.

Definitie van aanwijzer

De aanwijzer is een variabele die het geheugenadres van een andere variabele bevat. Het gegevenstype van beide, de pointervariabele en de variabele waarvan het adres wordt toegewezen aan een pointervariabele, moet hetzelfde zijn. De pointervariabele is als volgt gedeclareerd.

// Verklaring in C ++ type * naam;

Hier is 'type' een gegevenstype, 'naam' is de naam van de pointervariabele. Het ‘type’ definieert welk type variabele adres kan worden opgeslagen in de pointer variabele. De integer-aanwijzer slaat bijvoorbeeld het adres van de variabele integer op. Er zijn twee aanwijzeroperatoren ‘*’ en ‘&’. De operator ‘*’ retourneert de waarde op het adres, die wordt opgeslagen in de variabele gevolgd door het ‘*’ -teken. De operator ‘&’ geeft het adres van de variabele terug, gevolgd door het teken ‘&’.

// bijvoorbeeld int b = 10 int a = & b; // Hier wordt het adres van b opgeslagen in de variabele a. // laat het adres van b 2000 zijn, dus nu a = 2000. int c = * a; // Hier retourneert de integer-pointervariabele * a de waarde die zich bevindt op het adres dat is opgeslagen in een .ie. c = 10.

Er zijn slechts twee rekenkundige operatoren die u op aanwijzers kunt gebruiken, d.w.z. optellen en aftrekken. Als u increment toepast op een variabele met een geheel getal, wordt dit verhoogd met de grootte van het gegevenstype, d.w.z. met 2 bytes, omdat het een integer is, moet het bij increment op de volgende variabele met het gehele getal wijzen. Hetzelfde is het geval met afname.

// p is een geheel getal aanwijzer met een waarde van 2000. p ++; // nu p = 2002. P--; // bevat nu weer p 2000, verlaagd met twee bytes.

  1. Een array slaat de variabelen van vergelijkbare gegevenstypen op en de gegevenstypen van de variabelen moeten overeenkomen met het type array. Aan de andere kant slaat de pointervariabele het adres op van een variabele, van een type dat lijkt op een type pointervariabele.
  2. We kunnen een reeks aanwijzers genereren, d.w.z. een reeks waarvan de variabelen de pointervariabelen zijn. Aan de andere kant kunnen we een aanwijzer maken die naar een array verwijst.
  3. Java ondersteunt array, maar het ondersteunt geen pointers.
  4. Een arraygrootte bepaalt het aantal variabelen dat kan worden opgeslagen terwijl; een pointer variabele kan het adres van de enige variabele opslaan

Opmerking:

Java biedt geen ondersteuning voor of vermijdt strikt verwijzingen.

Gevolgtrekking:

Wanneer we aan gegevenselementen van hetzelfde gegevenstype moeten werken, kunnen we, in plaats van afzonderlijk aan variabelen te werken, een reeks van die variabelen van vergelijkbare gegevenstypen maken en er vervolgens op werken. Aanwijzingen zijn nodig voor een bepaald programma, het geeft enorme kracht, maar helaas, als een aanwijzer een onjuiste waarde bevat, zal dit de moeilijkste bug zijn om te vinden.