力扣——有效的括号官方C语言的代码解释一下



```c
//那个if括号里传的是什么,是ASCII码吗?.
//ch是不是都是左括号

char pairs(char a) {
    if (a == '}') return '{';
    if (a == ']') return '[';
    if (a == ')') return '(';
    return 0;
}

bool isValid(char* s) {
    int n = strlen(s);
    if (n % 2 == 1) {
        return false;
    }
    int stk[n + 1], top = 0;
    for (int i = 0; i < n; i++) {
        char ch = pairs(s[i]);
        if (ch) {       //这里看不懂
            if (top == 0 || stk[top - 1] != ch) {
                return false;
            }
            top--;
        } else {
            stk[top++] = s[i];
        }
    }
    return top == 0;
}




char pairs(char a) 函数,当 char a 是 } ] ) ,返回值是字符的 ASCII值,当都不是时,返回 0值。
if(ch) 当ch不为 0 时,等价于if(ch != 0)。

char ch = pairs(s[i]);将函数pairs返回值赋给ch,然后看上面的函数的返回值。if (ch) ,如果ch(也就是返回值)不为0,就进去执行大括号内的语句