Förhållandet mellan matriser och pekare i C-programmering (med exempel)

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)motsvarar x+1och x(1)motsvarar *(x+1).
  • &x(2)motsvarar x+2och x(2)motsvarar *(x+2).
  • I &x(i)grund x+ioch botten motsvarar och x(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 3visades 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.

Intressanta artiklar...