C 可以添加一个不带方括号或整数下标的数组吗?结果如何?

C 可以添加一个不带方括号或整数下标的数组吗?结果如何?,c,arrays,pointers,C,Arrays,Pointers,我正在听一个在线讲座,我看到了一个数组求和的函数 int arraySum(int array[], const int n) { int sum = 0, *ptr; int *const arrayEnd = array + n; ... } 我以前从未见过将数组添加到整数中。如果n是数组的大小,那么array+n是指arrayEnd被分配了数组[]中最后一个元素的值,还是指类似该元素地址的其他值 您看到的是指针算术 arra

我正在听一个在线讲座,我看到了一个数组求和的函数

int arraySum(int array[], const int n)
    {
        int sum = 0, *ptr;
        int *const arrayEnd = array + n;
        ...
    }

我以前从未见过将数组添加到整数中。如果n是数组的大小,那么array+n是指arrayEnd被分配了数组[]中最后一个元素的值,还是指类似该元素地址的其他值

您看到的是指针算术

array
是指向数组开头的指针。假设数组有
n
个元素,则
array+n
(或等效地
&array[n]
)指向数组末尾的一个元素


将指针指向数组末尾之后的一个元素是合法的,但是您不能取消对该指针的引用。

void f(int-array[])
void f(int*array)
在C中是相同的。因此,当您推测它是最后一个元素的地址时,您几乎是对的:它是最后一个元素的地址。这意味着它对于少于个检查是有用的,但不用于取消引用,因为这可能会崩溃或导致垃圾值。

在C
x[a]
中与
*(x+a)
非常相似。首先,这里没有“数组”。在函数参数列表中,
int-array[]
隐式转换为
int*array
。因此,从一开始,
array
就是一个指针。如果
array
是一个实际的数组,那么它在这个上下文中也会衰减为指针。但在您的示例中不需要它,因为
array
已经是一个指针。@AnT:函数参数中的数组声明从一开始就不是指针。首先是数组声明,然后调整为指针。一个区别是数组的元素类型必须是完整的(指针不需要这样做),有些编译器会强制执行此操作。@AnT:例如。