数组名不是指针!!!
- 数组名指代的是数组整个实体结构。
- 数组名可以外延成指代实体的指针,而且是一个指针常量。
- 指向数组的指针,仅仅是数组第一个元素的地址。
- a[i]内部翻译为*(a+i)
- 对数组名取地址,&array+1,其步长是整个数组,与&(array+1),步长是一个数组元素不同
数组名退化为指针
在形参为数组的情况下,数组名会退化为指针,在函数内部,实际上是一个指针。1
2
3
4void foo(int array[])
{
cout << sizeof(array) << endl; //输出为8,为一指针大小,不是数组的大小
}
sizeof是个操作符,不是函数
sizeof操作符:求得是对象或类型的大小,这里的“大小”指的是“所占内存空间的实际大小”。
数组名代表的是整个数组结构实体,所以求得的是整个数组实体的内存大小。
指针结构实体本身,表示“一个指针结构”占用的内存大小,64位系统为8字节。
1 | int array[10]; |