When you increment a
T*, it moves sizeof(T) bytes.† This is because it doesn't make sense to move any other value: if I'm pointing at an int that's 4 bytes in size, for example, what would incrementing less than 4 leave me with? A partial int mixed with some other data: nonsensical.http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/BitOp/pointer.html
The formula used is rather simple. Assume that p1 and p2 are both pointers of type T *. Then, the value computed is:
( p2 - p1 ) == ( addr( p2 ) - addr( p1 ) ) / sizeof( T )
int c[3]={1,2,3};
cout<<&c+1<<" "<<&c<<endl;
cout<<(char*)(&c+1)-(char*)(&c)<<endl;//print 12 but if change to int* c it prints 4
int * arr[ 12 ] ;
int ** ptr = arr ;
cout<<(char*)(ptr+1)-(char*)ptr<<endl; //print 4
a more naive example:
int days[] = {1,2,3,4,5};
int *ptr2 = days;
printf("%u\n", sizeof(days));
printf("%u\n", sizeof(ptr));
No comments:
Post a Comment