c - 将指针分配给 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;
}
谁能解释这两个下一个内存地址会发生什么?
解决方案
你的“实验”有缺陷。
在这两种情况下,您都在访问内存位置并分配值,就好像int
这些位置有一个有效的对象一样。两者都是未定义的行为。