[讨论][数组]是否只有 指针 而无 数组?
数组真的搞死人啊!
最近我在迷糊了两次之后,终于猜想,实际上在使用数组的过程中,是不存在数组的,只有指针的存在。
比如 int a[10],那么 a 就是 int*,而 &a 是 int (*)[10]。
再如 int a[10][10],a 是 int (*)[10], &a 是 int (*)[10][10];而 a[0] 是 int*,&a[0] 是 int (*)[10]。
http://expert.csdn.net/Expert/topic/2326/2326942.xml?temp=8.251369E-03
再看这样一个问题:
___ // this is the return type
f (int a[][2])
{
return a[1];
}
它的返回值是什么呢?开始我以为是 int[2],但是其实是 int*。
另一个问题是:
new int[4][4],你能得到一个 int (*)[4] 的指针;而 new int[1][4][4],你能得到相同的空间,但是返回值是 int (*)[4][4]。好象声明的数组最后总是要蜕去一层,变成一个指针。
是否只有在定义的时候会出现像 int a[10][10] 这样的东西呢?只有在函数的参数可以达到 int a[][10] 这样的相近,但这只是形式,其实它还是 int (*)[10]。就算在定义的时候有 int a[10][10],a 在使用时还是一个指针。
这是否就是 C/C++ 里数组不能整体引用,而只能通过指针去索引呢?因为实际你能得到的,永远只有指针。