首页 > 解决方案 > 将指针分配给 int 的确切下一个内存地址

问题描述

我试图将一个指针分配给一个 int 数字的确切下一个内存地址,并给它这个数字的两倍值。但是我只能在 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;
}

谁能解释这两个下一个内存地址会发生什么?

标签: cpointers

解决方案


你的“实验”有缺陷。

在这两种情况下,您都在访问内存位置并分配值,就好像int这些位置有一个有效的对象一样。两者都是未定义的行为。


推荐阅读