C语言中一维、二维数组的指针式与计算式地址:区别、关联及适用场景
数组元素地址两种获取方式的区别与关联
一维数组场景
- 指针方式:
arr + i - 地址计算公式:基地址 + 元素大小 × 元素序号
这两种方式完全等价。在C语言里,数组名arr多数场景下会自动转换成指向首元素的指针,arr + i的底层计算逻辑就是基地址加上i个元素的内存偏移,和公式的计算过程完全一致。
- 选用建议:写代码时直接用
arr + i更简洁高效;需要理解内存布局原理时,用地址计算公式能更直观看到偏移的本质。
二维数组场景
- 指针方式:
(*(arr + i) + j) - 地址计算公式:基地址 + 元素大小 ×(行号 × 总列数 + 列号)
这两种方式同样完全等价,可以拆解理解:
arr + i指向二维数组的第i行(二维数组的每一行都是一个一维数组),*(arr + i)会将行指针转换成该行首元素的指针;*(arr + i) + j就是该行首元素地址加上j个元素的偏移,底层计算逻辑和给出的地址公式完全匹配,也体现了二维数组在内存中连续按行存储的特性。
- 选用建议:代码里用
(*(arr + i) + j)或者更易读的&arr[i][j]都可;分析内存结构、排查内存相关问题时,地址计算公式能帮你更清晰地梳理偏移逻辑。
内容的提问来源于stack exchange,提问作者hogar
相关产品推荐
相关产品推荐

