徹底明白p++,*(p++)等 經典例子:char str []="Orange or Apple?";讓你徹底明白p++,*(p++)等
總體來說,對於char型別 的指標是 比較特別的:
p++就是指標的移位,cout<<*p:就是取出指標當前值得元素cout<<p:就是這個指標指向的全部字元;
例子:
#include <iostream> using namespace std; int main() {
char str []="Orange or Apple?"; char *p=str; cout<<p<<endl;//輸出全部str cout <<p++<<endl;//指標you移位一下 cout<<*p<<endl; //輸出指標指向的元素 cout<<p<<endl;//輸出指標後面的元素 return 0; }
結果:
Orange or Apple? Orange or Apple? r range or Apple?
#include <iostream> using namespace std; class CExcept{}; class CExceptApple:public CExcept{}; class CExceptOrange:public CExcept{}; int main() { try{ char str []="Orange or Apple?"; char newStr[10]; char *p=str; for(;p-str<=6;p++) newStr[p-str]=*p; newStr[p-str]=0; cout<<newStr<<endl; switch(*(p-1)){ case 'm': throw CExceptApple(); case 't': throw CExceptOrange(); default: throw CExcept(); }
}catch(CExceptApple){cout<<"Apple";} catch(CExceptOrange){cout<<"Orange";} catch(CExcept){cout<<"UnKnow";} return 0; }
結果:
Orange UnKnow
補充:
int
arr[5] = { 1,3,5,7,9 };
int
*p = arr;
*++p:p先自+,然後*p,最終為3
++*p:先*p,即arr[0]=1,然後再++,最終為2
*p++:值為arr[0],即1,該語句執行完畢後,p指向arr[1]
(*p)++:先*p,即arr[0]=1,然後1++,該語句執行完畢後arr[0] =2
*(p++):效果等同於*p++
再來一個例子:
這個char是一個字串形式的。
#include <iostream> using namespace std; int main() {
char str []="Orange or Apple?"; char newSte[10]; char *p=str; cout<<*p<<endl; cout<<p<<endl; cout <<*p++<<endl; cout <<*p<<endl; cout <<p++<<endl;
cout <<*p<<endl;
return 0; }