C语言中for循环中的赋值语句不起作用咋回事,求解,如何解决?

void scanf_max(int p[a][b])
{
    int i, n;
    int* q;
    float z , ave = 0;
    for (i = 0; i < a; i++)
    {
        q = p[i];
        printf("qq%d\n",*q);
        for (n = 0; n < b; n++)
        {
            z =*q;       //这行不能把指针q指向的数据传输给z,换成其他的也不行,求解。
            printf("p%d\n",*q);    
            printf("p%d\n", z );
            q++;
            if (z > ave)
            {
                ave = z;

            }
            else
                ave = ave;
        }
    
    }
        printf("The max is %d",ave);
}

z是浮点型, printf("p%d\n", z );是错误的
printf("p%f\n", z );
或者把z改为整型

注意 ave z 与 q 的数据类型,修改如下,供参考:

void scanf_max(int p[a][b])
{
    int i, n;
    int* q;
    float z , ave = 0;
    for (i = 0; i < a; i++)
    {
        q = p[i];
        printf("qq:%d\n",*q);
        for (n = 0; n < b; n++)
        {
            z = (float)*q;       //这行不能把指针q指向的数据传输给z,换成其他的也不行,求解。
            printf("p: %d\n",*q);
            printf("z: %f\n", z ); //printf("z: %d\n", z );
            q++;
            if (z > ave)
            {
                ave = z;
            }
            //else
            //    ave = ave;
        }
    }
    printf("The max is %f",ave); //printf("The max is %d",ave);
}