不使用运算符 [] 在二维静态数组中查找元素
Posted
技术标签:
【中文标题】不使用运算符 [] 在二维静态数组中查找元素【英文标题】:Finding an element in a 2-D static array without using operator [] 【发布时间】:2020-04-03 14:19:32 【问题描述】:给定静态 2 给定静态二维数组如下:
int m[4][6];
如何在不使用 operator[] 的情况下访问m[2][4]
?
【问题讨论】:
计算一个带有偏移量的指针。 aticleworld.com/… 应该做你正在寻找的东西*(*(m + 2) + 4)
.
能具体点吗
谢谢大家,我可以删除这个吗。我是新手
【参考方案1】:
对我来说听起来像是经典的指针练习。
尝试使用m的地址和一些指针算法。
int main()
int m[4][6];
m[2][4] = 42; // Using [] only for testing
int x = *(*(m + 2) + 4);
printf("%d\n", x);
【讨论】:
【参考方案2】:这样做:
*(*(m+2) + 4)
这是操作符[]
真正做的事情,这里的数组将dacay指向指针。
对此的简要说明:
在*(m+2)
中,m
被用作int(*)[4]
的prvalue指向第一个
m
的“行”,然后解引用 m+2
得到对第三个“行”的一维数组的引用。
然后,这个结果衰减到int*
prvalue再次指向第三“行”的第一个元素,然后解引用this_value + 4
,我们成功检索到第三行的第5个元素,这就是你得到的确切结果通过使用m[2][4]
。
【讨论】:
以上是关于不使用运算符 [] 在二维静态数组中查找元素的主要内容,如果未能解决你的问题,请参考以下文章