本指南的含义是什么?“因为数组实际上是指针”?

时间:2014-02-27 17:05:03

标签: c arrays pointers

我正在学习C,我目前正在使用指针部分:http://www.learn-c.org/en/Pointers

指南中有一点说:

  

因为数组实际上是指针......

数组如何实际指针?我知道如果我创建char array[20]array是数组第一个元素的内存地址,(它是“指向”那个,还是只保持值),对吧?这是他们的意思吗?

据我所知,数组只是一系列内存地址,下标访问[0][1]等只是这些内存地址的值。我完全离开了吗?

4 个答案:

答案 0 :(得分:3)

您不必信任您在互联网上找到的所有内容:数组不是指针。有些上下文以相同的方式处理数组和指针,但是大多数数组都是数组,而不是指针。

使数组与指针不同的最重要方面是

  • 阵列有一个特定的数据区域;指针需要在使用前与存储区域相关联
  • 无法重新分配数组以引用内存中的其他位置
  • 数组具有可通过sizeof
  • 检索的特定大小
  • 如果struct
  • 中包含数组成员,则将复制数组数据

数组和指针行为相同的一个上下文是将它们传递给函数时:在这种情况下,编译器获取数组的地址,从中生成指针,并将该指针传递给函数。该过程有时被称为“衰变为指针的数组”。

答案 1 :(得分:1)

这意味着作者不理解C数组和指针,也不应该编写试图描述C语言的指南。

数组和指针有着密切的关系,但它们是截然不同的东西。数组不是指针。数组对象由某个元素类型的有序对象序列组成;指针对象包含单个内存地址。

数组操作通常是通过指向元素类型的指针来完成的,并且有一些语言规则旨在使这更方便(不幸的是,这些规则也会引起很大的混淆)。

最值得注意的这样的规则是,在大多数情况下,数组类型的表达式被隐式转换为指向数组第一个元素的指针。这不会创建指针对象,它只会生成指针;除非您实际创建一个指针对象,否则不会分配指针对象。

阅读comp.lang.c FAQ的第6部分 - 并避免任何错误地声称“数组真的是指针”的教程。

答案 2 :(得分:0)

在你的样本中。 array是内存地址,数组的各种索引表示该地址的偏移量。 (例如,array [0] =数组地址处的值,没有偏移量)

答案 3 :(得分:0)

好吧,array[10]*(array + 10)完全相同。如果您使用该公式,您将获得该值。 在C中,char array[20]是一个实际值的数组,而不是指针。 char *array[20]将是一个包含20个char指针的数组。