鱼C论坛

 找回密码
 立即注册
查看: 3814|回复: 9

大家来帮我看看出啥问题了~~C语言指针部分的。

[复制链接]
发表于 2012-7-24 16:02:52 | 显示全部楼层 |阅读模式
15鱼币
#include <stdio.h>
void main()
{
    double score[4][4] = {{67,76.5,70,80},{56,67.3,70.4,62.1},\
{84,89.5,94,77},{58.4,65.5,76,71}};
    int *search(double(*pointer)[4], int n);
    double *p;
    int i, m, n;
    printf("不及格的学生号及其成绩:\n");
    for (i=0; i<4; i++)
    {
        m = search(score, i);            /*warning C4047: '=' : 'int ' differs in levels of indirection from 'int *' */
        p = score[i];
        if ( m )
        {
            for (n=0; n<4; n++)
            {
                printf("学号:%d\n%5.2f\n",i, *(p+n));
            }
        }
    }
    printf("\n\n\n");
}
double search(double (*pointer)[4], int n)
{                                                        /*error C2040: 'search' : 'double (double (*)[4],int )' differs in levels of indirection from 'int *(double (*)[4],int )'*/
    double *pt;
    int j, m;
    pt = *(pointer + n);
    for (j=0; j<4; j++)
    {
        if ( *(pt+j) < 60)
        {
            m = 1;
        }
        else
        {
            m = 0;
        }
    }
    return m;
}

最佳答案

查看完整内容

#include void main() { double score[4][4] = {{67,76.5,70,80},{56,67.3,70.4,62.1},\ {84,89.5,94,77},{58.4,65.5,76,71}}; double search(double(*pointer)[4], int n); //你这里定义的 int * 也就是函数的返回值是 int *类型的 double (*p)[4]; int i, m, n; printf("不及格的学生号及其成绩:\n"); for (i=0; i
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-24 16:02:53 | 显示全部楼层
#include <stdio.h>
void main()
{
    double score[4][4] = {{67,76.5,70,80},{56,67.3,70.4,62.1},\
{84,89.5,94,77},{58.4,65.5,76,71}};
    double  search(double(*pointer)[4], int n);  //你这里定义的 int * 也就是函数的返回值是 int *类型的  
    double (*p)[4];
    int i, m, n;
    printf("不及格的学生号及其成绩:\n");
    for (i=0; i<4; i++)
    {                                      //但是这里你 m前面定义的是 int 类型的  所以 出现这个错误  
        m = search(score, i);            /*warning C4047: '=' : 'int ' differs in levels of indirection from 'int *' */
        p = score;          //p的类型是 double类型的,score是个二维数组 类型是 double[4][4] 类型, 要想p = score 就要 把p定义成一个数组指针  double (* p)[4] ;
        if ( m )
        {
            for (n=0; n<4; n++)
            {
                printf("学号:%d\n%5.2f\n",i, *(p+n));
            }
        }
    }
    printf("\n\n\n");
}
double search(double (*pointer)[4], int n)  //你前面申明的函数 是 int * search(double(*pointer)[4], int n);
                                             //这里又是 double search(double (*pointer)[4], int n) 一个是 Int* 一个是 double 能不出错吗?
{                                                        /*error C2040: 'search' : 'double (double (*)[4],int )' differs in levels of indirection from 'int *(double (*)[4],int )'*/
    double *pt;
    int j, m;
    pt = *(pointer + n);
    for (j=0; j<4; j++)
    {
        if ( *(pt+j) < 60)
        {
            m = 1;
        }
        else
        {
            m = 0;
        }
    }
    return m;
}
我只是帮你解决了语法错误,逻辑有没有错误我没看,因为你想要什么结果 没说。。。具体错误原因我都注释了   这是修改过的你的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-24 18:25:17 | 显示全部楼层
int *search(double(*pointer)[4], int n);改为int (*search)(double(*pointer)[4], int n);
  p是指针指向一个地址,score是个2维数组,p=score[0]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-24 19:47:29 | 显示全部楼层
这个代码用C语言这样写可能比较好,虽然看起来清爽但是要完全读懂还是需要一定功力的。
  1. #include <stdio.h>
  2. #define StudentCount 4
  3. #define CourseCount 4
  4. typedef double Grade[CourseCount];
  5. typedef Grade GradeVect[StudentCount];

  6. void search_print_fail( const GradeVect*  );

  7. int main(void) {
  8.         GradeVect vect = {
  9.                 {67,76.5,70,80},
  10.                 {56,67.3,70.4,62.1},
  11.                 {84,89.5,94,77},
  12.                 {58.4,65.5,76,71}
  13.         };

  14.         printf("These Student fails:\n");
  15.         search_print_fail( &vect );
  16. }

  17. static int isFail( const Grade* pGrade );
  18. static void printStudent( int num, const Grade* pGrade );

  19. void search_print_fail( const GradeVect* pvec  ) {
  20.         int i;
  21.         for( i=0; i<StudentCount; ++i  ) {
  22.                 if( isFail( &(*pvec)[i] ) ) {
  23.                         printStudent( i, &(*pvec)[i] );
  24.                 }
  25.         }
  26. }

  27. static int isFail( const Grade* pGrade ) {
  28.         int i;
  29.         for( i=0;i<CourseCount;++i )
  30.                 if( (*pGrade)[i]<60 ) return 1;
  31.         return 0;
  32. }

  33. static void printStudent( int num, const Grade* pGrade ) {
  34.         int i;
  35.         printf("Student Number:%d Grades are: ", num);
  36.         for( i=0;i<CourseCount;++i )
  37.                 printf( "%5.2f ", (*pGrade)[i] );
  38.         printf("\n");
  39. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-24 19:58:26 | 显示全部楼层
#include <stdio.h>
void main()
{
   double score[4][4] = {{67,76.5,70,80},{56,67.3,70.4,62.1},
{84,89.5,94,77},{58.4,65.5,76,71}};

    int search(double(*pointer)[4], int n);
    double *p;
    int i, n;
        int m;
    printf("不及格的学生号及其成绩:\n");
    for (i=0; i<4; i++)
    {
        m = search(score,i);
                p = score[i];
           if ( m==0 )
        {
            for (n=0; n<4; n++)
            {
                printf("学号:%d %5.2f ",i, *(p+n));
            }
        }
               
    }
    printf("\n\n\n");
}
int search (double(*pointer)[4], int n)
{                                                      
    double *pt;
    int i, m;
    for (i=0; i<4; i++)
    {
      
        if  (*((*(pointer + n))+i)<60)
        {
            m = 0;
                        goto loop;
        }
        else
        {
            m = 1;
        }
       
    }
loop:
    return m;
}

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-24 20:00:23 | 显示全部楼层
这段代码我是根据你的理解来写的  可能有点混乱,应该还可以优化 , 我一开始没看懂你 m=0和m=1是什么意思 后面想了下你是想用来做判断   ,所以照着修改了下  我也刚初学:lol  那代码有的地方可以修改 反正输出结果一样 我就不动了 :lol 我觉得你应该是想表达这个意思吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-25 16:05:59 | 显示全部楼层
好像是函数指针的问题哦I
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-25 17:06:54 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-25 17:09:41 | 显示全部楼层
253009514 发表于 2012-7-24 19:58
#include
void main()
{

最好不用goto指令哦~~,用break跳出循环就可以了,谢谢哈!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-26 07:51:38 | 显示全部楼层
:loveliness:共同进步而已
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 08:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表