C中的数组是通过指针使用的吗?

Posted

技术标签:

【中文标题】C中的数组是通过指针使用的吗?【英文标题】:Arrays in C are used through pointers? 【发布时间】:2011-01-23 08:37:49 【问题描述】:

在我在这里发布的一个问题中:C++ - class issue

其中一个来自@SanSS 的回复提到了回复的以下部分:

C 中的数组是通过指针来使用的...

这是怎么做到的?而且,如果可能的话,你能举个例子来澄清一下吗?

谢谢。

【问题讨论】:

这听起来像是一个更笼统的“什么是指针”问题。这里有很多值得一读的答案。如果他们没有涵盖您的答案,您能否完善您的问题? C 中的数组指针。 SO 和 Google 上有很多 Q/A 可以帮助您... 【参考方案1】:

这可能意味着几件事:

1) 下标运算符是根据指针算术定义的。 C99 6.5.2.1/2“数组下标”说:

下标运算符[]的定义是E1[E2]等同于(*((E1)+(E2)))。

例如,假设您有一个这样声明的数组:char s[] = "012345";

以下所有计算结果为“4”:

s[4] *(s + 4) 4[s] - 这个 不寻常的构造可能会让你大吃一惊, 但由于这种方式 下标由 标准,这相当于*(4 + s),与*(s + 4)相同 和s[4]一样。

2)(与上述密切相关)数组名称在大多数表达式中计算为指向数组第一个元素的指针(作为主要例外的sizeof 操作的操作数)。

【讨论】:

以上是关于C中的数组是通过指针使用的吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用指针表达式访问 C 中的二维数组的元素?

如何通过c中的指针传递二维数组[重复]

通过C中的void函数返回动态数组

C语言基础知识:指针和数组的区别是什么?

地图是通过价值或Go中的参考传递的吗?

c_cpp 允许通过C中的void指针从任何类型访问字节数组