数组和指针的区别

数组和指针的区别:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int GetSize(int data[]){
return sizeof(data);
}

int _tmain(int argc, _TCHAR* argv[]){
int data1[] = {1, 2, 3, 4, 5};
int size1 = sizeof(data1);

int* data2 = data1;
int size2 = sizeof(data2);

int size3 = GetSize(data1);

printf("%d, %d, %d\n", size1, size2, size3);
}

答案是输出:20, 4, 4

sizeof 是个关键字而不是函数,sizeof(data1)是求数组的大小,这里有 5 个 int 型元素,所以总共 20 个字节,data2 声明为指针,尽管指向了一个数组,但本质上只是一个指针,所以 sizeof(data2)的语义范围收缩了,无法仅通过一个指针得知其所指范围。在 32 位系统上一个指针是 4 字节,所以结果就是 4。在 C/C++中,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针,因此 size3 的结果也是 4。所以 C++传数组做参数至少两个参数起步,一个指针,一个数组长度。