请问此时的r是不是野指针


void move(int * p, int m, int n)
{
    int * q, *r;
    r = &p[m-1];
    for (q=p+m-1; q>p; --q)
    {
        *q = *(q-1);
    }
    *p = *r;
    --n;
    if(n>0)
    move(&p[0], m, n);
}
请问这样也是野指针吗, 我让他指向了最后一个元素

这里 r 虽然不是野指针,但在后面的for(){} 循环里, *q = *(q-1); 这条语句在执行时,循环改变了数组最后一位的元素的值。

指向最后一个元素应该是 r = p + m - 1; 这样不是野指针

m是数组长度,这么写没问题


可以查看手册:c语言-指针 中的内容

这样不是野指针,指向了给定的地址