Я понимаю, как работает арифметика указателей, но у меня есть сомнения по поводу одного из указателей указателя: Если у меня есть этот код:
int x;
int* ptr = &x;
int** ptrptr = &ptr;
В стандартной системе Windows, если я делаю:
printf("%d",ptr);
ptr++;
printf("%d",ptr);
ptr будет иметь значение «+4», чем раньше, очевидно, потому что целое число требует 4 байта.
Теперь, если я сделаю:
printf("%d",ptrptr);
ptrptr++;
printf("%d",ptrptr);
ptrptrбудет иметь значение +16, чем раньше, почему?
Я прошу прощения, если этот вопрос уже был опубликован, но я не смог выяснить, спасибо.
Код:
#include<stdio.h>
int main(void){
int x;
int* ptr = &x;
int** ptrptr = &ptr;
printf("Pointer: %p\nPointer of pointer: %p\n",(void*)ptr,(void*)ptrptr);
ptr++;
ptrptr++;
printf("Pointer: %p\nPointer of pointer: %p\n",(void*)ptr,(void*)ptrptr);
return 0;
}
Вывод:
Pointer: 000000000062FE44
Pointer of pointer: 000000000062FE38
Pointer: 000000000062FE48
Pointer of pointer: 000000000062FE40