c - 为什么将指针值加一不允许在该位置设置值?

标签 c pointers

#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/

相关文章:

c - 用C的指针数组?

c++ - 多对象手写单链表段错误

比较 bmp 的亮度

c - 你如何以编程方式在 Linux 上创建一个完全空的稀疏文件?

matlab - 如何在 MATLAB 中将指针分配给对象的属性?

c - 指向字符串数组的指针

c - 为什么 b 数组不复制整个 a 数组?

c - 优化发生在哪个编译阶段

c++ - 在一组 27 个浮点值中选择中位数的最快代码 C/C++

c++ - 为什么 union 的大小不是最大成员的大小?