下面是对“++p、p++和*++p的区别”进行详细讲解的攻略:
1. ++p、p++和*++p的含义
- ++*p:表示先取出p所指向的地址上的值,再将这个值加1,最后赋值回这个地址上。
- *p++:表示先将p所指向的地址上的值取出,再让指针p加1指向下一个地址。注意,这里加1是针对指针p本身的地址的改变,而不是针对其所指向的地址。
- *++p:表示先让指针p加1指向下一个地址,再将该地址上的值取出并使用。
2. 示例说明
下面分别通过两个示例说明这三个操作符的应用场景以及具体实现。
示例一:++*p操作符的使用
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
++*p;
cout << *p << endl;
上面的代码中,我们首先定义了一个包含了5个元素的整型数组arr,并将该数组的第一个元素的地址赋值给指针p。
在执行++*p
操作符之前,p所指向的地址上保存的值是1。执行该操作后,1被加1,变成2,并赋值回p所指向的地址上。
最终输出结果为2。
示例二:*++p操作符的使用
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
cout << *p++ << endl;
cout << *p << endl;
cout << *++p << endl;
cout << *p << endl;
上面的代码中,我们同样定义了包含了5个元素的整型数组arr,并将该数组的第一个元素的地址赋值给指针p。接下来,我们对p进行了两次操作,并通过输出结果来观察其变化。
第一次操作中,我们先通过*p++
操作符将p所指向的地址上的值取出,值为1,并让指针p加1,转而指向下一个地址。由于p++是后置加加形式,所以这个变化是在输出1后才执行的。因此第一个输出结果为1。
第二次操作中,我们使用了*++p
操作符,先让指针p指向下一个地址,接着取出该地址上的值,值为3,最终输出结果为3。但是由于这里++p是前置加加形式,所以这个变化是在取出值之前就已经发生了,因此在此操作后,指针p本身的地址已经从数组的第二个元素变成了第三个元素。
由此可见,通过灵活运用++p、p++和*++p这三个操作符,我们可以非常方便地对指针的指向和存储内容进行操作。