语境:
在发现这a[i]
只是语法糖,*(a + i)
因此相当于 *(i + a)
和i[a]
. 我的现实被颠倒了,许多“啊哈!” 在接下来的几天的学习和阅读中,启示性的时刻紧随其后(“这就是为什么数组总是通过引用传递!”等)。从那时起,我将指针/数组等价性内化并将其牢记在心,所以想象一下,当我偶然发现这个叫做“数组衰减”的东西时是多么粗鲁的震惊。这是典型的例子:
代码:
#include <stdio.h>
int Length(int*);
int main () {
int arr[100];
printf("Length of array: %d\n",(int)(sizeof(arr)/sizeof(arr[0])));
printf("Length of array: %d\n",Length(arr));
return 0;
}
int Length(int arr[]) {
return sizeof(arr)/sizeof(arr[0]);
}
结果:
Length of array: 100
Length of array: 2
问题:
所以事实证明,C毕竟对数组有一定的认识!在声明数组的 main 中,程序能够正确报告它的大小。现在我想知道有多少数组语法只是指针操作的语法糖(以前我假设:全部)。C实际上确实有数组,它们的局限性是什么?这个例子表明,只要你在同一个函数中,就有可能得到它们的长度,你还能做什么很酷的事情?在这个腐烂的东西开始之前,你能走多远?