指针功能很强大,有时候也有很多有意思的操作
直接上代码吧 这段代码 看着还是很复杂的
void test()
{
int arr[5] = { 9,8,7,6,2 };
int *ptr = (int *)(&arr + 1);
cout << *(int*)(&arr) << endl;
cout << *(&arr) << endl;
cout << &arr << endl;//3
cout << *(&arr + 1) << endl;
cout << (&arr + 1) << endl;
cout << *(ptr - 1) << endl;//6
cout << *arr << endl;
cout << *(arr + 1) << endl;//相当于跳过一个元素
cout << **(&arr) << endl;
}
对于输出语句我们一句一句的解释:
&arr 相当于 int( * )[5] 那么进行+1就是跳过一个数组
第一句因为转成了 int* 所以说打印出了9;
第二句 &arr 相当于 int( * )[5] 而因为是一个数组接引用返回的是第一个元素的地址,如果再接引用那么返回的是第一个元素的值
第三句 打印出地址
第四,五句句 看地址我们可以发现跳过了一个数组 ,而打印的结果原因可参考二三
第六句 指针在数组的末尾的下一个位置然后往前跳转一个单位
第七句 arr放的是第一个元素的地址,++操作就是指针往后走
第八句 二级接引用操作就打出值了
总结
arr[]={1,2,3,4,5,6};
arr为一个数组的时候,那arr就为一个arr中的一号元素,如果&操作就相当于取地址,此时再++,–操作或跳出整个数组。 每一个&操作可以被一个*操作所抵消