区别1:观察下面程序
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int a[5] = {1, 2, 3, 4, 5};
printf("%p\n", a);
printf("%p\n", &a);//吃惊a == &a, &a是一个int (*)[5]类型的数组指针
printf("%p\n", &a + 1);//重点理解,由于&a是一个指针长度为5的数组的指针,故&a+1移动5*sizeof(int)字节的大小
int *p = (int *)(&a + 1);//猜测*(p-1)? 答案:5.指针++后地址移动的距离是根据指针的类型所决定的
printf("\n");
int *b = new int[5];
printf("%p\n", b);
printf("%p\n", &b);//此处与数组的区别
printf("%p\n", (&b + 1));//从output中可以看出在本机器上指针占据了2byte
return 0;
}
output:
0x7ffea251f650
0x7ffea251f650
0x7ffea251f664
0x16af010
0x7ffea251f648
0x7ffea251f650