指针易混淆

#include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
    int a[5];
    cout << "a:    "<< a << endl;
    cout << "&a[0]:" << &a[0] << endl;
    cout << "&a   :"<< &a << endl;
    cout << "a+1  :"<< a+1 << endl;
    cout << "&a+1 :"<< &a+1 << endl;
    return 0;
}
a:    0x7fff5aaac660
&a[0]:0x7fff5aaac660
&a   :0x7fff5aaac660
a+1  :0x7fff5aaac664
&a+1 :0x7fff5aaac674

数组名是一个指针,指向数组的第一个元素即a[0]a+0(a)

&a虽然在数值上和a、a[0]相等,但是它们的 跨度/步长 却不一样:

  • a+1: 跨越一个int(4字节的大小)
  • &a+1: 跨越一个数组(5*4个字节的大小)

results matching ""

    No results matching ""