Vztah mezi poli a ukazateli v programování C (s příklady)

V tomto kurzu se dozvíte o vztahu mezi poli a ukazateli v programování C. Naučíte se také přistupovat k prvkům pole pomocí ukazatelů.

Než se dozvíte o vztahu mezi poli a ukazateli, nezapomeňte zkontrolovat tato dvě témata:

  • C pole
  • Ukazatele C.

Vztah mezi poli a ukazateli

Pole je blok sekvenčních dat. Napíšeme program pro tisk adres prvků pole.

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

Výstup

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Adresa pole x: 1450734448 

Mezi dvěma po sobě následujícími prvky pole x je rozdíl 4 bajty. Je to proto, že velikost intje 4 bajty (na našem kompilátoru).

Všimněte si, že adresa & x (0) a x je stejná. Je to proto, že název proměnné x ukazuje na první prvek pole.

Z výše uvedeného příkladu je zřejmé, že &x(0)je ekvivalentní s x. A x(0)je ekvivalentní k *x.

Podobně,

  • &x(1)je ekvivalentní x+1a x(1)je ekvivalentní *(x+1).
  • &x(2)je ekvivalentní x+2a x(2)je ekvivalentní *(x+2).
  • V zásadě &x(i)je ekvivalentní x+ia x(i)je ekvivalentní *(x+i).

Příklad 1: Ukazatele a pole

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

Když spustíte program, výstup bude:

 Zadejte 6 čísel: 2 3 4 4 12 4 Součet = 29 

Zde jsme deklarovali pole x 6 prvků. Pro přístup k prvkům pole jsme použili ukazatele.

Ve většině kontextů se názvy polí rozpadají na ukazatele. Jednoduše řečeno, názvy polí se převádějí na ukazatele. To je důvod, proč můžete použít ukazatele pro přístup k prvkům polí. Měli byste si však pamatovat, že ukazatele a pole nejsou stejné .

Existuje několik případů, kdy se názvy polí nerozkládají na ukazatele. Další informace najdete na stránce: Kdy se název pole nerozpadá na ukazatel?

Příklad 2: Pole a ukazatele

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

Když spustíte program, výstup bude:

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

V tomto příkladu &x(2)je adresa třetího prvku přiřazena ukazateli ptr. Proto 3se zobrazilo, když jsme tiskli *ptr.

A tisk *(ptr+1)nám dává čtvrtý prvek. Podobně *(ptr-1)nám tisk dává druhý prvek.

Zajímavé články...