我正在学习C,我目前正在使用指针部分:http://www.learn-c.org/en/Pointers
指南中有一点说:
因为数组实际上是指针......
数组如何实际指针?我知道如果我创建char array[20]
,array
是数组第一个元素的内存地址,(它是“指向”那个,还是只保持值),对吧?这是他们的意思吗?
据我所知,数组只是一系列内存地址,下标访问[0]
,[1]
等只是这些内存地址的值。我完全离开了吗?
答案 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
指针的数组。