Назначение указателя на точный следующий адрес памяти для int - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь назначить указатель на точный следующий адрес памяти целого числа и дать ему удвоенное значение числа. Однако я могу писать только после 3 (* 4, что является размером int) или более адресов памяти, иначе он ничего не печатает.

Это работает

#include <stdio.h>


int main(){
    int x, *ptr, memory_jump = 3;
    scanf("%d",&x);
    ptr = &x+memory_jump;
    *ptr = x * 2;
    printf("Given int = %d, Address = %d \nNext address content = %d,Next address pos = %d",x,&x,*ptr,ptr);

    return 0;
}

Если я уменьшу памятьпри переходе к 2 или 1 он вообще ничего не печатает, поэтому возникает ошибка.

int main(){
    int x, *ptr, memory_jump = 2;
    scanf("%d",&x);
    ptr = &x+memory_jump;
    *ptr = x * 2;
    printf("%d", (ptr-2));
    printf("Given int = %d, Address = %d \nNext address content = %d,Next address pos = %d",x,&x,*ptr,ptr);

    return 0;
}

Может кто-нибудь объяснить, что происходит с этими двумя следующими адресами памяти?

1 Ответ

2 голосов
/ 09 ноября 2019

Ваши «эксперименты» ошибочны.

В обоих случаях вы получаете доступ к ячейкам памяти и присваиваете значения, как если бы в этих местах находился действительный объект int. И оба неопределенное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...