Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Arytmetyka wskaźnikowa;

Ostatnio zmodyfikowano 2016-07-19 18:30
Autor Wiadomość
mich2803
Temat założony przez niniejszego użytkownika
Arytmetyka wskaźnikowa;
» 2016-07-17 20:12:51
Witam. Mam pytanie odnośnie przykładu pokazanego w książce.
C/C++
#include <iostream>


using namespace std;

int main()
{
    int tacos[ 10 ] = { 5, 2, 8.4, 1, 2, 2, 4, 6, 8 };
    int * pt = tacos;
    pt = pt + 1;
    int * pe = & tacos[ 9 ];
    pe = pe - 1;
    int diff = pe - pt;
   
    return 0;
   
}
A mianowicie jakiego typu jest wartość zwracana przez wskaźnik ? Rozumiem,  że typ powinien być taki sam na jaki wskazuje wskaźnik (czyli w tym przypadku int). Skoro tak jest to dlaczego wartość zmiennej diff wynosi 7 a nie 28 ? Wiem, że 28/4 daje 7 a taka jest zazwyczaj wielkość zmiennej int (4 bajty). Czy ktoś może to wytłumaczyć step by step ?
P-150079
pekfos
» 2016-07-17 20:21:05
Mi to wygląda na matematykę.
pt = tacos + 1
pe = tacos + 8
diff = tacos + 8 - (tacos + 1) = 7
P-150080
mateczek
» 2016-07-19 18:20:50
C/C++
#include <iostream>
using namespace std;
int main()
{
    int tacos[ 10 ] = { 5, 2, 8, 1, 2, 2, 4, 6, 8 };
    int * pt = tacos;
    pt = pt + 1;
    int * pe = & tacos[ 9 ];
    pe = pe - 1;
   
   
   
    //wskaźniki jako liczba int
    int diff1 =( int ) pe -( int ) pt; // to chciałeś ??
    //lub wskaźniki rzutowane na *char - wskaźnik do bajtu
    int diff2 =( char * ) pe -( char * ) pt;
   
    cout << "wskazniki jako liczba int: " << diff1 << "\n rzutowanie na (*char) " << diff2 << endl;
    return 0;
   
}
P-150124
Gibas11
» 2016-07-19 18:30:58
@up
C/C++
int diff1 =( int ) pe -( int ) pt; // to chciałeś ??
pe = 0;
pt = 2^33;
diff1 = ?
Polecam size_t i uint64_t. :P
P-150125
« 1 »
  Strona 1 z 1