You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中数组与指针:为何执行第2行代码后指针y指向数组末尾?

为什么指针y会指向数组的末尾位置?

咱们得从指针的类型和算术运算规则说起,一步步拆解就懂了:

  • 先搞清楚&x的类型
    你可能以为&x和数组名x是一回事,但其实不是!数组名x在多数场景下会隐式转成指向第一个元素的int*指针,但&x取的是整个数组的地址,它的类型是int (*)[7]——简单说就是“指向包含7个int的数组的指针”。这是关键的区别点。

  • 指针+1的偏移逻辑
    C语言里,指针做加减运算时,偏移的字节数是由它指向的类型大小决定的。对于&x这个int (*)[7]类型的指针,&x + 1的偏移量是:

    1 × sizeof(指针指向的类型) = 1 × sizeof(int[7]) = 7 × sizeof(int)
    假设int占4字节,那就是偏移28字节,刚好跳过整个数组x,落到数组最后一个元素(x[6],值为700)的下一个位置——也就是咱们说的“数组末尾位置”。

  • 强制类型转换的作用
    (int *)(&x + 1)把刚才那个指向数组的指针,强制转换成了int*类型(指向单个int的指针)。这时候变量y就变成了一个指向数组末尾之后那个位置的int指针。

顺便提一句,后面的*(y-1)会输出700,也能反过来验证:因为y是int*,减1会往前偏移sizeof(int)字节,正好指向数组最后一个元素x[6],解引用就拿到了700。

内容的提问来源于stack exchange,提问作者Shivang Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 08:47:35