如i++,是后缀; ++i,是前缀。
这种可以用在其他地方,比如指针。
代码1:
#include<iostream> #include<string> int main() { using namespace std; int i=1; string a = "abcdefg"; cout << a[0] << endl; //显示string类字符串的第一个字母 cout << char(++a[0]) << endl; //++a[0]和a[0]+1是等价的,显示这个字符串的第二个字母, //之所以用char括起来,是因为将之强制转换为字符显示 system("pause"); return 0; }
输出:
a b 请按任意键继续. . .
注意:
①a[0]是一个整体,所以需要++a[0]或者a[0]++
②因为是++a[0],所以是先加再显示。
③a[0]实际上是一个内存地址,因此才可以操纵地址偏移。另外需要注意的是,a[0]是一个字符宽,所以偏移的时候也是偏移一个字符宽
代码2:
#include<iostream> #include<string> int main() { using namespace std; int i=1; string a = "abcdefg"; cout << a[0] << endl; //显示string类字符串的第一个字母 cout << char(a[0]++) << endl; cout << char(a[0]++) << endl; cout << a[0] << endl; //之所以用char括起来,是因为将之强制转换为字符显示 system("pause"); return 0; }
输出:
a a b c 请按任意键继续. . .
注意:
①在代码2里。我们使用了a[0]++,因为后缀的原理,先输出,再加1。
于是在第一次cout << char(a[0]++) << endl;里面,输出的依然是a;
第二次输出的才是b;
而第三次没有使用后缀,但由于第二次已经加过了(即地址偏移了),所以cout<<a[0]<<endl;输出的是c。
②依然需要注意,字符串名,实际上是字符串的地址,a是整体"abcdefg"的地址,而a[0]是一个字符的地址,且是第一个字符。但偏移后就不一定是第一个字符a了,可能是b或者c。根据偏移量而定。