b 是指向int类型a的一个指针。第一行输出打印出b指向数据的地址。第二行输出打印第一行输出的地址再加上4个字节。原因是:指针的加减操作,例如加一,则会在原来指向的数据地址基础上,加上所指数据所占的字节数,在例子中,所指的数据指的是int 类型,占4个字节,所以在原基础上增加4个字节。
了解了上述原理后,我们来看看下面这种情况。数组创建的方式有两种。第一种:
int * arr = new int[2] = {1,2}; cout<<"arr : "<<arr<<endl; cout<<"arr+1:"<<arr+1<<endl; arr是一个int类型的指针,指向了一个数组第一个元素的地址。由于arr是一个int类型的指针,因此arr+1的时候,在arr地址基础上加上4个字节,即可得到arr+1的值
第二种情况:
int arr[] = {1,2,3}; cout<<"arr : "<<arr<<endl; cout<<"&arr : "<<&arr<<endl; cout<<"arr+1 : "<<arr+1<<endl; cout<<"&arr+1 : "<<&arr+1<<endl;第一个输出,接受参数是一个数组,隐式转换成数组首地址。第二个输出&arr,这得到的是一个数组指针,类型为int (*)[3]。 第三个输出,按照上面的规则,arr转换成指向第一个元素地址的指针,也就是一个int指针,所以arr+1是在arr基础上加上了4个字节,指向数组第二个元素。 第四个输出。由于&arr是一个int (*)[3]类型的指针,所以&arr+1应该要在&arr的基础上加上一个个数为3个的int数组的长度。即 3*4 = 12 个字节。