Tömbök és mutatók kapcsolata a C programozásban (példákkal)

Ebben az oktatóanyagban megtudhatja a tömbök és a mutatók kapcsolatát a C programozásban. Azt is megtanulja, hogyan kell elérni a tömb elemeit a mutatók segítségével.

Mielőtt megismerné a tömbök és a mutatók kapcsolatát, mindenképpen ellenőrizze ezt a két témát:

  • C tömbök
  • C Mutatók

A tömbök és a mutatók kapcsolata

A tömb a szekvenciális adatok blokkja. Írjunk egy programot a tömb elemek címének kinyomtatására.

 #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; ) 

Kimenet

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Az x tömb címe: 1450734448 

Az x tömb két egymást követő eleme között 4 bájt különbség van. Ez azért van, mert a méret int4 bájt (fordítónkon).

Vegye figyelembe, hogy az & x (0) és az x címe megegyezik. Ez azért van, mert az x változó neve a tömb első elemére mutat.

A fenti példa alapján egyértelmű, hogy &x(0)egyenértékű az x-szel. És x(0)ekvivalens *x.

Hasonlóképpen,

  • &x(1)egyenértékű x+1és x(1)egyenértékű *(x+1).
  • &x(2)egyenértékű x+2és x(2)egyenértékű *(x+2).
  • Alapjában véve &x(i)ekvivalens x+iés x(i)ekvivalens *(x+i).

1. példa: Mutatók és tömbök

 #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; ) 

A program futtatásakor a kimenet a következő lesz:

 Írjon be 6 számot: 2 3 4 4 12 4 Összeg = 29 

Itt deklaráltunk egy 6 elemből álló x tömböt. A tömb elemeihez való hozzáféréshez mutatókat használtunk.

A legtöbb összefüggésben a tömbnevek mutatókra bomlanak. Egyszerű szavakkal, a tömbök neveit mutatóakká alakítják át. Ez az oka annak, hogy mutatókat használhat a tömbök elemeinek eléréséhez. Ne feledje azonban, hogy a mutatók és tömbök nem azonosak .

Néhány esetben a tömbnevek nem bomlanak le a mutatókra. Ha többet szeretne megtudni, látogasson el ide: Mikor nem bomlik a tömb neve mutatóvá?

2. példa: tömbök és mutatók

 #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; )

A program futtatásakor a kimenet a következő lesz:

 * ptr = 3 * (ptr + 1) = 4 * (ptr-1) = 2

Ebben a példában &x(2)a harmadik elem címét hozzárendeljük a ptr mutatóhoz. Ezért a 3nyomtatáskor megjelent *ptr.

És a nyomtatás *(ptr+1)megadja a negyedik elemet. Hasonlóképpen a nyomtatás *(ptr-1)megadja a második elemet.

érdekes cikkek...