C++数组名退化指针实例
C++基础知识之数组&指针&数组名退化指针实例
在C/C++中,数组和指针是相互关联又有区别的两个概念。当我们声明一个数组时,其数组的名字也是一个指针,该指针指向数组的第一个元素。我们可以用一个指针来访问数组。
但是,需要注意的是,在C/C++中没有记录数组的大小,因此用指针访问数组中的元素时,我们要确保没有超出数组的边界。见如下代码:
int GetSize(int data[])
{
return sizeof(data);
}
int main()
{
int data1[] = {1, 2, 3, 4, 5};
int size1 = sizeof(data1); //20
int *data2 = data1;
int size2 = sizeof(data2); //8
int size3 = GetSize(data1); //8
cout << size1 << " " << size2 << " " << size3 << endl;
//20 8 8
}
上面输出为 "20 8 8"。data1是一个数组, sizeof(data1)是求数组的大小,这个数组包含5个int型的证书,每个整数占4字节,所以总共是20字节。data2声明为指针,尽管它指向了数组data1的第一个数字,但它的本质仍然为一个指针,由于本机为64位系统,所以对任何指针求sizeof(),得到的结果为8。此外,在C/C++中,当数组作为函数的参数进行传递时, 数组就会自动退化为同类型的指针,所以说sizeof(size3)的结果为8。