有时看c++代码,会有这样的情况
char a[10];
cin >> a + 1;
那么这个cin>>a+1
是什么意思呢,查了一下资料,发现Stack Overflow上一位老哥解释得比较清楚
什么意思呢,也就是说这是一个指针运算,a表示的是指针char*,由于>>操作优先级低于+,所以先进行+1运算,a+1表示的是&a[1]这个地址,所以说cin>>a+1也就是从地址&a[1]处开始写输入,相当于舍弃了a[0]这个值。
我们验证一下这个想法:
#include<iostream>
using namespace std;
int main() {
char a[10];
cin >> a + 1; //等价于scanf("%s", a+1);
printf("%s", a);//从a[0]开始打印,显示乱码
puts("");
printf("%s", a + 1);//从a[1]开始打印
return 0;
}
果然a[0]处乱码,由于从a[1]开始写,于是只有a[1], a[2], a[3]保存着我们输入的有意义的字符。