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 int
4 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
ésx(1)
egyenértékű*(x+1)
.&x(2)
egyenértékűx+2
ésx(2)
egyenértékű*(x+2)
.- …
- Alapjában véve
&x(i)
ekvivalensx+i
ésx(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 3
nyomtatá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.