I den här handledningen lär du dig om förhållandet mellan matriser och pekare i C-programmering. Du lär dig också att komma åt arrayelement med hjälp av pekare.
Innan du lär dig om förhållandet mellan matriser och pekare, se till att kontrollera dessa två ämnen:
- C Arrays
- C Pekare
Förhållandet mellan matriser och pekare
En matris är ett block med sekventiell data. Låt oss skriva ett program för att skriva ut adresser till arrayelement.
#include int main() ( int x(4); int i; for(i = 0; i < 4; ++i) ( printf("&x(%d) = %p", i, &x(i)); ) printf("Address of array x: %p", x); return 0; )
Produktion
& x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Adress för array x: 1450734448
Det finns en skillnad på 4 byte mellan två på varandra följande element i array x. Det beror på att storleken int
är 4 byte (på vår kompilator).
Observera att adressen till & x (0) och x är densamma. Det beror på att variabelnamnet x pekar på det första elementet i matrisen.
Från exemplet ovan är det tydligt att det &x(0)
motsvarar x. Och x(0)
motsvarar *x
.
Liknande,
&x(1)
motsvararx+1
ochx(1)
motsvarar*(x+1)
.&x(2)
motsvararx+2
ochx(2)
motsvarar*(x+2)
.- …
- I
&x(i)
grundx+i
och botten motsvarar ochx(i)
motsvarar*(x+i)
.
Exempel 1: Pekare och matriser
#include int main() ( int i, x(6), sum = 0; printf("Enter 6 numbers: "); for(i = 0; i < 6; ++i) ( // Equivalent to scanf("%d", &x(i)); scanf("%d", x+i); // Equivalent to sum += x(i) sum += *(x+i); ) printf("Sum = %d", sum); return 0; )
När du kör programmet blir resultatet:
Ange 6 nummer: 2 3 4 4 12 4 Sum = 29
Här har vi deklarerat en matris x med 6 element. För att komma åt element i matrisen har vi använt pekare.
I de flesta sammanhang förfaller arraynamn till pekare. Med enkla ord konverteras arraynamn till pekare. Det är anledningen till att du kan använda pekare för att komma åt element i matriser. Du bör dock komma ihåg att pekare och matriser inte är desamma .
Det finns några fall där arraynamn inte förfaller till pekare. För att lära dig mer, besök: När förfaller inte arraynamn till en pekare?
Exempel 2: Arrayer och pekare
#include int main() ( int x(5) = (1, 2, 3, 4, 5); int* ptr; // ptr is assigned the address of the third element ptr = &x(2); printf("*ptr = %d ", *ptr); // 3 printf("*(ptr+1) = %d ", *(ptr+1)); // 4 printf("*(ptr-1) = %d", *(ptr-1)); // 2 return 0; )
När du kör programmet blir resultatet:
* ptr = 3 * (ptr + 1) = 4 * (ptr-1) = 2
I det här exemplet &x(2)
tilldelas adressen till det tredje elementet ptr-pekaren. Därför 3
visades när vi skrev ut *ptr
.
Och utskrift *(ptr+1)
ger oss det fjärde elementet. På samma sätt *(ptr-1)
ger utskrift det andra elementet.