C++数组不完全等价指针的两种情况

1,sizeof

2,对数组名取地址(&)

 

以上两种情况下,数组名是数组类型

除了以上情况下,数组名在其他任何情况下都是指向数组首元素的指针

void test01()
{

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

  printf("sizeof arr:%d\n", sizeof arr);

  printf("&arr addr : %d\n", &arr); //arr指向整个数组

  printf("&arr + 1 addr : %d\n", &arr + 1); //取的是整个数组的步长

 

  int *p = (int *)arr; //p是指向数组的首元素
  printf("p value = %d\n", *p); //指向首元素的值
  printf("p adrr = %d\n", &p); //p本身分配的地址
  printf("&p adrr = %d\n", &*p); //指向数组首元素的地址
  printf("&arr[0] adrr = %d\n", &(*(arr + 0))); //数组首元素的地址
}

 

posted @ 2020-12-13 10:44  沉浸编码无法自拔  阅读(74)  评论(0)    收藏  举报