有关C语言指针的一点小问题


int indexOf(const char *s1,const  char *s2){
    int n=0,flag=0;
    char *p,*q;
    while(*s2!='\0')
    {
        p=s1;
        q=s2;
        while((*p==*q)&&(*p!='\0')&&(*q!='\0'))
        {
            p++;
            q++;
        }
        if(*p=='\0')
        {
            return n;
            flag++;
        }
        s2++;
        n++;
    }
    if(flag==0){
        return -1;
    }
}

这是在网上看到的一段代码,最近老师上指针,听得云里雾里的。这段代码是实现找出母串中子串的位置。我的问题是里面的n是代表数组的下标吗?为什么啊?没弄懂n是怎么用的。

是的,s2相当于母串,假设母串是abcdefg,子串是cdef
一开始指针都分别指向第一个字符,但不相等,所以s2++,q指针右移指向了b
b依然不等于p所指向的c,继续右移,移到了c,此时n = 2表示的就是c在母串中的位置
现在两个指针指向的字符相同进入while循环,两个指针同时往后移,直到结束,*p == '\0'
返回了n就表示字符的位置