在二维数组函数中返回数组?

时间:2015-04-13 04:26:30

标签: c compiler-errors

我想使用函数返回二维数组的平均值与不同的数组,程序运行正常,但它返回一个大的负数,我如何返回数组或应用指向我的函数?我在哪里添加指针使其工作?

我遇到了这个:
警告:传递' returnAvg'的参数1在没有强制转换的情况下从整数生成指针[默认启用] |

#include <stdio.h>                                                             
#include <stdlib.h>                                                            
#include <math.h>                                                              

void returnAvg(int allTest[2][2],int students,int test);                       



int main ()                                                                    
{                                                                              

    int students = 2, test = 2, i,j;                                           
    int allTest[students][test];                                               


    for(i=0;i<students;i++){                                                   
        for(j=0;j<test;j++){                                                   
            printf("Student [%d] test [%d] score was> ",i+1,j+1);              
            scanf("%d",&allTest[i][j]);                                        
        }                                                                      
    }                                                                          
    returnAvg(allTest[2][2],students,test);                                    


    return 0;                                                                  
}                                                                              
void returnAvg(int allTest[2][2],int students,int test){                       
    int i,j;                                                                   
    int avg[students];                                                         

    for(i=0;i<students;i++){                                                   
        int sum = 0;                                                           
        for(j=0;j<test;j++){                                                   
            sum += (allTest[i][j]);                                            
        }                                                                      
        avg[i] = sum/test;                                                     
    }                                                                          
    printf("the average is %d, %d", avg[0],avg[1]);                            
    return;                                                                    
} 

4 个答案:

答案 0 :(得分:2)

你的代码很好,除了:

  

returnAvg(allTest[2][2],students,test);

应该是

  

returnAvg(allTest,students,test);

你不必在这里给出attTest的大小,因为你没有在这里定义它,只是提供给函数的参数。 您可能会看到您正在使用代码here

答案 1 :(得分:1)

 returnAvg(allTest[2][2], students, test);

错误,因为allTest[2][2]求值为int且函数需要数组int [2][2]

您需要使用:

 returnAvg(allTest, students, test);

答案 2 :(得分:1)

用于将数组传递给函数returnAvg的方法是错误的!我认为最简单的方法是将数组作为指针传递。这是因为这种数组是一个块或连续的内存区域!

我认为可以使用不同的方式分配数组和向量!也许使用C ++ new或C malloc;但这将成为你的下一步!

检索包含平均值的向量的方法将在下面讨论!

我已经在64位系统下编译了您的代码,将此代码添加到您的主文件中:

for(i=0;i<students;i++)
    for(j=0;j<test;j++)                                                   
        printf("%p\n",&(allTest[i][j]));

输出应该是这样的:

0x7fff0cd89e60
0x7fff0cd89e64
0x7fff0cd89e68
0x7fff0cd89e6c

这表明我说的话!所有元素都是连续的!

我们知道有&#34;基地&#34;指向第一个元素的指针。在输出中是0x7fff0cd89e60(这是指向allStudent [0] [0]的指针)。

此指针与数组元素的所有指针之间的关系为:

0x7fff0cd89e60 + sizeof(int) * (i*test+j)

说明指针算术我们可以将你的函数修改为:

void returnAvg(int * allTest,int students,int test){                       
    int i,j;                                                                   
    int avg[students];                                                         

    for(i=0;i<students;i++){                                                   
        int sum = 0;                                                           
        for(j=0;j<test;j++){                                                   
            sum += (allTest[i*students+j]);                                            
        }                                                                      
        avg[i] = sum/test;                                                     
    }                                                                          
    printf("the average is %d, %d", avg[0],avg[1]);                            
    return;                                                                    
} 

您可以在主电话中将此功能称为:

returnAvg(&(allTest[0][0]),students,test);  

现在我们可以看到如何将avg数组传递给main!

这里是您可以修改学生人数和测试结果的代码!

void returnAvg(int *avg, int * allTest,int students,int test);

int main ()                                                                    
{                                                                              

    int students = 2, test = 2, i,j;                                           
    int allTest[students][test];                                               

    int avg[students];

    /*
    for(i=0;i<students;i++)
    for(j=0;j<test;j++)                                                   
           printf("%p\n",&(allTest[i][j]));
    */

    for(i=0;i<students;i++){                                                   
        for(j=0;j<test;j++){                                                   
            printf("Student [%d] test [%d] score was> ",i+1,j+1);              
            scanf("%d",&allTest[i][j]);                                        
        }                                                                      
    }                       


    returnAvg(avg,&(allTest[0][0]),students,test);                                    
    for(i=0;i<students;i++){                                                   
        printf("Student %d average: %d\n", i+1, avg[i]);
    }

    return 0;                                                                  
}

void returnAvg(int * avg, int * allTest,int students,int test){                       
    int i,j;                                                                   

    for(i=0;i<students;i++){                                                   
        int sum = 0;                                                           
        for(j=0;j<test;j++){                                                   
            sum += (allTest[i*test+j]);                                            
        }                                                                      
        avg[i] = sum/test;                                                     
    }                                                                          

    return;                                                                    
} 

答案 3 :(得分:0)

在这里快速更新你的代码,allTest arg也应该重做

#include <stdio.h>                                                             
#include <stdlib.h>                                                            
#include <math.h>                                                              

static void returnAvg(int allTest[2][2],int students,int test, int *avg){      
    int i,j;                                                                   

    for(i=0;i<students;i++){                                                   
        int sum = 0;                                                           
        for(j=0;j<test;j++){                                                   
            sum += (allTest[i][j]);                                            
        }                                                                      
        avg[i] = sum/test;                                                     
    }                                                                          
    printf("the average is %d, %d", avg[0],avg[1]);                            
}                                                                              

int main ()                                                                    
{                                                                              
    int students = 2, test = 2, i,j;                                           
    int allTest[students][test];                                               
    int avg[students];                                                         

    for(i = 0; i < students; i++){                                             
        for(j = 0; j < test; j++){                                             
            printf("Student [%d] test [%d] score was> ", i + 1, j + 1);        
            scanf("%d", &allTest[i][j]);                                       
        }                                                                      
    }                                                                          
    returnAvg(allTest, students, test, avg);                                   


    return 0;                                                                  
}