#include<stdio.h>;
void main(){
int x=10;
int *y=&x+1;
*y=15;
printf("\n Address of x is %u",&x);
printf("\n Value of y is %d",*y);
}
在这段代码中,为什么*y
的值不是15,
在输出中 x=25908 的值和 y=25912 的值?
我想知道当我将 x 的下一个地址处的值设置为 15 时,为什么 15 没有显示为输出?
最佳答案
在您的代码中,通过编写
int *y=&x+1;
您正在访问未分配给您的进程(程序)的内存。它调用undefined behaviour .
如果x
是一个数组名称,并且为偏移量分配了足够的内存(此处为值1
) ,取消引用从此操作中获得的 y
是合法的。但是,这里,x
是单个变量,您不能指望访问所谓的下一个 地址,它是无效的。
也就是说,要打印地址,请始终使用表单
printf("Address is %p\n", (void *)&var);
或类似的。
关于c - 为什么将指针值加一不允许在该位置设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32326205/