Matriisien ja osoittimien suhde C-ohjelmoinnissa (esimerkkien kanssa)

Tässä opetusohjelmassa opit taulukoiden ja osoittimien välisestä suhteesta C-ohjelmoinnissa. Opit myös käyttämään taulukkoelementtejä osoittimilla.

Ennen kuin opit matriisien ja osoittimien välisestä suhteesta, muista tarkistaa nämä kaksi aihetta:

  • C Taulukot
  • C Osoittimet

Matriisien ja osoittimien suhde

Taulukko on peräkkäisten tietojen lohko. Kirjoitetaan ohjelma taulukkoelementtien osoitteiden tulostamiseksi.

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

Tuotos

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Taulukon x osoite: 1450734448 

Taulukon x kahden peräkkäisen elementin välillä on 4 tavun ero. Tämä johtuu siitä, että koko inton 4 tavua (meidän kääntäjällä).

Huomaa, että & x (0): n ja x: n osoite on sama. Se johtuu siitä, että muuttujan nimi x osoittaa taulukon ensimmäiseen elementtiin.

Yllä olevasta esimerkistä on selvää, että &x(0)se vastaa x: tä. Ja x(0)vastaa *x.

Samoin,

  • &x(1)vastaa x+1ja x(1)on yhtä suuri kuin *(x+1).
  • &x(2)vastaa x+2ja x(2)on yhtä suuri kuin *(x+2).
  • Pohjimmiltaan &x(i)vastaa x+ija x(i)vastaa *(x+i).

Esimerkki 1: Osoittimet ja taulukot

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

Kun suoritat ohjelmaa, tulos on:

 Syötä 6 numeroa: 2 3 4 4 12 4 Summa = 29 

Tässä olemme ilmoittaneet taulukon x 6 elementistä. Taulukon elementtien käyttämiseen olemme käyttäneet osoittimia.

Useimmissa yhteyksissä taulukon nimet hajoavat osoittimiksi. Yksinkertaisesti sanottuna taulukon nimet muunnetaan osoittimiksi. Siksi voit käyttää osoittimia päästäksesi matriisien elementteihin. Muista kuitenkin, että osoittimet ja taulukot eivät ole samat .

On muutamia tapauksia, joissa taulukon nimet eivät hajoa osoittimiin. Lisätietoja on osoitteessa: Milloin matriisin nimi ei hajoa osoittimeksi?

Esimerkki 2: Taulukot ja osoittimet

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

Kun suoritat ohjelmaa, tulos on:

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

Tässä esimerkissä &x(2)kolmannen elementin osoite annetaan ptr-osoittimelle. Siksi 3näytettiin, kun tulostimme *ptr.

Ja painaminen *(ptr+1)antaa meille neljännen elementin. Samoin tulostus *(ptr-1)antaa meille toisen elementin.

Mielenkiintoisia artikkeleita...