chgtx 发表于 2015-9-5 21:03:11

illegal indirection的疑惑

/*有四个学生,每个学生有四科的成绩,该程序功能是找出有不及格成绩的学生*/


#include <stdio.h>

void main()
{
    double score[] = {{60.0, 70.0, 80.5, 90.5}, {56.0, 89.0, 67.0, 88.0}, {34.2, 78.5, 90.0, 68.5}, {66.0, 78.0, 88.0, 97.0}};
   
    void search(double(*point));               /*以指针变量做形参*/

    search(score);                                             /*调用查找函数*/
}

void search(double(*pointer))
{
    int i, j;
    double *pt;
    pt = *pointer;                                          /*i是学生号,从0到3*/
    for(i = 0; i < 4; i++)
    {
          for(j = 0; j < 4; j++)                           /*j是每个学生每科成绩,从0到3*/
          {
                if(*(*(pt + i) + j) < 60)
                {
                      printf("the failed score number is score[%d]\n", i);
                      printf("\n");
                      break;
                }
          }

    }
   
}

编译过后在 printf("the failed score number is score[%d]\n", i); 出现illegal indirection;

如果将search 函数换成以下形式则不会,怎么回事?
void search(double(*pointer))
{
    int i, j;
    double *pt;
    pt = *pointer;                                          /*i是学生号,从0到3*/
    for(i = 0; i < 4; i++)
    {
          for(j = 0; j < 4; j++)                           /*j是每个学生每科成绩,从0到3*/
          {
                if(*(*(pt + i) + j) < 60)
                {
                      printf("the failed score number is score[%d]\n", i);
                      printf("\n");
                      break;
                }
          }

    }
   
}

ryxcaixia 发表于 2015-9-5 21:03:12

ps 对于指针 楼主记住这句经典的话 可以加深对指针的理解 无论二级三级指针 还是n级指针 都遵循这个规律
指针的类型 决定了指针的视野 指针的视野决定了指针的步长
int* p, p是一个一级指针, 每次加1或减1, 移动的是一个int大小的步长,
int** pp, pp是一个二级指针, 每次加1移动的是一个数组(int*)的大小, *pp自然也就是一个一级指针, 每次移动一个int大小, 距离例子 我如果要取第5行第10个元素, 就是*(*(pp+4)+9)

仰望天上的光 发表于 2015-9-5 22:08:19

double *pt;这个是pt的定义
*(*(pt + i) + j)等价于pt

其中pt是double 类型,所以pt后面再跟着就存在语法错误。

ryxcaixia 发表于 2015-9-6 10:41:50

函数serch中
double* pt 改         double(*pt) ;
pt = pointer;

void search(double(*pointer))
{
        int i, j;
        double(*pt) ;
        pt = pointer;                                          /*i是学生号,从0到3*/
        for(i = 0; i < 4; i++)
        {
                for(j = 0; j < 4; j++)                           /*j是每个学生每科成绩,从0到3*/
                {
                        if(*(*(pt + i) + j) < 60)
                        {
                                printf("the failed score number is score[%d]\n", i);
                                printf("\n");
                                break;
                        }
                }

        }

}




这应该是楼主想要的结果

chgtx 发表于 2015-9-6 21:40:25

ryxcaixia 发表于 2015-9-6 10:48
ps 对于指针 楼主记住这句经典的话 可以加深对指针的理解 无论二级三级指针 还是n级指针 都遵循这个规律
...

谢谢
页: [1]
查看完整版本: illegal indirection的疑惑