指针名和数组名的区别

参考:

指针和数组的区别

c中,数组名跟指针有区别吗?

有如下区别:

  1. 可以用数组名初始化指针,但是数组名必须用列表进行初始化
  2. 数组名指向固定内存地址,不能修改,而指针名可以指向其他地址
  3. 使用sizeof计算两者所占的内存字节数,数组名返回整个数组所占字节数,而指针名返回单个地址的字节大小(当前CPU的最大位数:8字节)

测试代码如下:

    int arr[3] = {1, 2, 3};
    int *p = arr;

    cout << arr << endl;
    cout << p << endl;

    cout << arr[1] << endl;
    cout << *(p + 1) << endl;

    cout << sizeof(arr) << endl;
    cout << sizeof(p) << endl;
  • 新建整型数组arr并初始化
  • 新建整型指针p,指向数组arr
  • 打印数组名和指针名,此时两者均指向数组首地址
  • 通过数组方式和指针方式访问第二个元素
  • 打印数组名和指针名所占内存字节数

结果如下:

0x7fff2b649180
0x7fff2b649180
2
2
12
8

总的来说,数组名就是指针常量,而指针名是指针变量