我很难理解这段代码。
a[i] + 1
是什么意思? cin >> (a[i] + 1)
在做什么?
char a[N][N];
for(int i = 1;i <= n;i++) {
cin >> (a[i] + 1);
for(int j = 1;j <= m;j++)
if(a[i][j] == '=')
merge(i,j + 1000);
}
整个代码在这里:https://codeforces.com/contest/1131/submission/50515808
答案 0 :(得分:4)
a
是一个数组数组。这就是C ++中的多维数组 。它具有N
个元素,每个元素的类型均为char[N]
(数组类型)。
a[i]
是数组类型的左值表达式,因此可以将其视为char (&)[N]
,它是对N个字符数组的引用。第i
个。
由于数组具有衰减到指向大多数表达式中指向其第一个元素的指针的属性,因此a[i] + 1
是指针在算术中使用的指针。它等于&a[i][1]
。整个过程是一个char*
,它指向大小为N-1
的缓冲区的开头。
因此,总体而言,cin >> (a[i] + 1)
对istream使用char*
的{{1}}重载。将字符存储在缓冲区operator>>
中,但跳过第一个字符。而且只能使用到c++20。当a[i]
重载最终replaced with overloads that take a reference to an array of a known bound时。因为char*
重载容易导致缓冲区溢出。