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

C语言二维数组代码中(int *) p的作用是什么?

关于二维数组指针与类型转换的解释

先明确两个指针的类型差异:

  • int(*p)[2]:这是指向包含2个int的数组的指针,它指向二维数组的一整行,寻址步长是2 * sizeof(int)(每次移动会跳过一整行)。
  • int *pint:这是指向单个int的指针,寻址步长是sizeof(int)(每次移动只跳过一个int)。

为什么需要(int *) p?

执行p = &s[i];后,p指向了二维数组s的第i行(整个数组单元)。但p的类型是int(*)[2],和pint的int*类型不兼容,直接赋值会触发编译器类型错误。(int*)p是强制类型转换,把指向数组的指针转换成指向单个int的指针,让两者类型匹配,才能成功赋值给pint。

赋值给pint的原因

转换后pint会指向第i行的第一个int元素,此时可以用普通int指针的方式遍历该行元素:pint + j指向该行第j个元素的地址,*(pint + j)就能取出对应的值。

其实这段代码完全可以省略pint,直接用(*p)[j]访问第i行第j列的元素,效果完全一致。作者这么写,大概率是为了演示不同指针类型的转换逻辑,以及如何用普通int指针操作数组行的元素。


内容的提问来源于stack exchange,提问作者Rounak Dutta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:05:12