求教指针大佬,ffmpeg源码


int av_match_list(const char *name, const char *list, char separator)
{
    const char *p, *q;

    for (p = name; p && *p; ) {
        for (q = list; q && *q; ) {
            int k;
            for (k = 0; p[k] == q[k] || (p[k]*q[k] == 0 && p[k]+q[k] == separator); k++)
                if (k && (!p[k] || p[k] == separator))
                    return 1;
            q = strchr(q, separator);
            q += !!q;
        }
        p = strchr(p, separator);
        p += !!p;
    }

    return 0;
}

p[k]*q[k] == 0 && p[k]+q[k] == separator 和 q += !!q 怎么理解啊

p[k]*q[k]==0就是判断两者至少有一个为0
separator不知道具体传递什么值啊
q += !!q,相当于先判断q是否为空,如果为空,则q不变,如果不为空,则q+1