Указатель арифметики указателя? - PullRequest
0 голосов
/ 21 января 2019

Я понимаю, как работает арифметика указателей, но у меня есть сомнения по поводу одного из указателей указателя: Если у меня есть этот код:

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...