Analiza kodu wskaźniki

0

Witam, proszę o pomoc w analizie kodu a dokładnie wyjaśnieniu tego co dzieje sie w petli i wyjaśnieniu skąd wzięły się wyniki:
1 2
1 0
1 0

#include<iostream>
using namespace std;
void f5( int & a, int * b )
{
    a++;
    * b = a / 2;
};
int main()
{
    int a = 2;
    int b = 1;
    for( int i = 0; i < 3; i++, a-- )
    {
        if( a < 2 )
             f5( a, & b );
        else f5( b, & a );
       
        cout << a << " " << b << endl;
    }
} 
0

Dopisz sobie coś takiego na początku pętli:

cout<<"W petli\na: "<<a<<"\nb: "<<*b<<endl;

zobaczysz jakie mają wartości na początku a jakie na końcu.
a++ znaczy tyle co a = a + 1

* b = a / 2;

do b przypisujesz część całkowitą a / 2.
Zwróć też uwagę na

a--

w pętli for. Myślę, że Ci się wtedy wszystko wyjaśni.

0

tylko nie za bardzo rozumiem co sie dzieje w momencie wywołania funckji

0

Przy wywołaniu funkcji do niej są przekazane parametry pierwszy przez referencje drugi przez wskaźnik.
Zmień (na czas analizy) nazwy parametrów wewnątrz funkcji np na p i q lub x i y bo inaczej będzie ci się mieszać.

0

tylko jakie operacje wykonywane są przy wywołaniu funkcji f5( b, & a );

0

Żadne oprócz przekazania parametrów. Zapewne chodzi Ci o ten "magiczny" ampersand. W taki sposób przypisujesz adres do wskaźnika:

int a = 5;
int *wskA = &a;

Na takiej samej przekazujesz parametry do funkcji f5.

0

Podczas pierwszego obiegu pętli program przechodzi do instrukcji else f5(b,&a); i jakie instrukjce i działania są wywoływane w funkcji że program zwraca 1i2 a przy drugim obiegu pętli jeśli zamienimy int na float zwraca 1i 0,5 - skąd się biorą wyniki tych liczb

0

A tym programie nie ma żadnych float. Poczytaj dokumentacje na temat dzielenia wartości całkowitych.

0

Pamiętaj, że moje a i b to są zmienne przekazywane do funkcji a nie zmienne z definicji funkcji!
I obieg (else):

void f5( b = 1, a = 2 ) {
   b++ -> b= 2;
   a = b/2 -> a = 2/2; -> a = 1;
}

zwracam a = 1, b = 2
Zmienjsza a w forze -> a = 0.
II obieg (if):

void f5( a = 0, b = 2 ) {
   a++ -> a= 1;
   b = a/2 -> b = 1/2; -> b = 0;
}

zwracam a = 1, b = 0
itd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1