error C2100:illegal indirection#includevoid main(){\x05float aver(float *a);\x05void nonstu(float *a,int t);\x05float a[3][4];\x05int i,p,t;\x05for(i=0;i

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 04:17:18
error C2100:illegal indirection#includevoid main(){\x05float aver(float *a);\x05void nonstu(float *a,int t);\x05float a[3][4];\x05int i,p,t;\x05for(i=0;i

error C2100:illegal indirection#includevoid main(){\x05float aver(float *a);\x05void nonstu(float *a,int t);\x05float a[3][4];\x05int i,p,t;\x05for(i=0;i
error C2100:illegal indirection
#include
void main()
{
\x05float aver(float *a);
\x05void nonstu(float *a,int t);
\x05float a[3][4];
\x05int i,p,t;
\x05for(i=0;i

error C2100:illegal indirection#includevoid main(){\x05float aver(float *a);\x05void nonstu(float *a,int t);\x05float a[3][4];\x05int i,p,t;\x05for(i=0;i
你的错误主要出在二维数组参数声明和数组访问出界上.下面是修改后的代码:



#include <stdio.h>

float aver(float (*a)[4]);  // 二维数组参数声明
void nonstu(float a[][4],int t);  // 等价声明

int main(void) {
  float a[3][4];
  int i, p, t;
  
  printf("Enter floats:\n");  // 提示输入
  for(i = 0; i < 3; i++)
    for(p = 0; p < 4; p++)  // 一维子数组的下标的上界是4
      scanf("%f", &a[i][p]);
      
  printf("Enter index:\n");  // 提示输入
  scanf("%d", &t);
  
  nonstu(a, t);
  printf("%f", aver(a));
  
  return 0;
}

float aver(float (*a)[4]) {
  int i, p;
  float t = 0;
  
  for(i = 0; i < 3; i++)
    for(p = 0; p < 4; p++)  // 条件控制设为p < 4使下标p得以便历有效值0~3
      t = t + *(*(a+i)+p);
      
  t = t / 12;
  
  return t;
}

void nonstu(float (*a)[4], int t) {
  // 下标有效范围为0~3,4出界
  printf("%f\n%f\n%f\n%f\n", *(*(a+t)+0), *(*(a+t)+1), *(*(a+t)+2), *(*(a+t)+3));
}