两个数组声明方法c ++之间的区别

Nit*_*arg 5 c++ arrays pointers memory-management dynamic-memory-allocation

这些可能是在c ++中声明数组(并为它们分配内存)的两种方法中的两种

1. int a[3];

2. int *b = new int[3];
Run Code Online (Sandbox Code Playgroud)

我想了解c ++如何以不同的方式处理这两者.

一个.在这两种情况下,我都可以使用以下语法访问数组:a[1]b[1]

湾 当我尝试cout<< acout<< b,都打印相应数组的第一个元素的地址.

它看起来好像a和b都被视为指向数组的第一个元素的指针.

C.但奇怪的是,当我尝试这样做时cout << sizeof(a),sizeof(b)他们分别打印出不同的值 - 分别为4和12.

我不明白为什么在这种情况下sizeof(b),正在打印整个数组的大小.

Pet*_*der 8

a是一个数组(类型int [3])
b是一个指针(类型int*)

在C++中,它们是完全不同的东西.

sizeof阵列是倍的每个元件的尺寸元件的数量.
sizeof指针是独立的阵列(通常是4或8个字节)的大小的.

数组和指针的唯一共同点是数组在几种情况下经常"衰减"到指针.当你打印出它们的价值时,就会发生这种情况.

  • -1:b是***而不是***指向数组的指针.b是指向int的指针.`int(*b)[N]`是一个指向数组的指针 (4认同)