如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。根据偏移量而定。