[基础知识]6.数组与指针的区别

版权声明:By TimepassbyZ 转载请注明出处! https://blog.csdn.net/TimepassbyZ/article/details/86141203

下面代码的运行结果是?

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",size1, size2, size3);
}
  • 分析
    data1是一个数组,sizeof(data1)是求数组的大小。这个数组包含5个整数,每个整数占4字节,因此总共占用20字节。data2声明为指针,尽管它指向了数组data1的第一个数字,但它的本质仍然是一个指针。在32位系统上,对任意指针求sizeof,得到的结果都是4。在C/C++中,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针。因此,尽管函数GetSize的参数data被声明为数组,但它会退化为指针,size3的结果仍然是4。答案:20, 4, 4

相关知识点:
除了以下三种情况外,在使用数组时,数组都会自动转换为指向第一个元素的指针
情况1:数组用作取地址操作符&的操作数
情况2:数组用作sizeof操作符的操作数
情况3:用数组对数组的引用进行初始化

int main()
{
    char a[] = {'1', '3', '5', '7', '9'};
    char (&b)[5] = a;
    cout << sizeof(a) << endl;
    cout << sizeof(*a) << endl;
    cout << sizeof(&a) << endl;
    cout << sizeof(a[0]) << endl;
    cout << sizeof(&a[0]) << endl;
    cout << *((char*)(&a + 1) - 1) << endl;
    cout << sizeof(b) << endl;
    cout << sizeof(*b) << endl;
    cout << sizeof(&b) << endl;
    cout << sizeof(b[0]) << endl;
    cout << sizeof(&b[0]) << endl;
    return 0;
}

答案:5 1 4 1 4 9 5 1 4 1 4

猜你喜欢

转载自blog.csdn.net/TimepassbyZ/article/details/86141203