Arytmetyka wskaźnikowa;
Ostatnio zmodyfikowano 2016-07-19 18:30
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. #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 ? |
|
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 |
|
mateczek |
» 2016-07-19 18:20:50 #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; int diff1 =( int ) pe -( int ) pt; int diff2 =( char * ) pe -( char * ) pt; cout << "wskazniki jako liczba int: " << diff1 << "\n rzutowanie na (*char) " << diff2 << endl; return 0; }
|
|
Gibas11 |
» 2016-07-19 18:30:58 @up int diff1 =( int ) pe -( int ) pt;
pe = 0; pt = 2^33; diff1 = ? Polecam size_t i uint64_t. :P |
|
« 1 » |