任务是通过用户输入填充数组中的数字,然后使用stats()函数计算该数组每一行的平均值等。stats()函数的标题如下:
int stats(int (*ptr)[5], int width, int height, int row_id, int* max, int* min, float *avg)当ptr是指向矩阵的指针时,宽度和高度是它的大小,row_id是被分析行的索引,max、min和avg是指向存储每个统计量的变量的指针。
使用以下行调用函数时:
stats(*ptr, 5,5,2, *max = NULL, *min = NULL, *avg=NULL);出现以下错误:
error: invalid type argument of unary '*' (have 'int')我尝试了不同的方法,但总是有一个错误,我如何解决这个问题?谢谢你的任何线索。
编辑:这是整个代码:
#include <stdio.h>
int stats(int (*ptr)[5], int width, int height, int row_id, int* max, int* min, float *avg)
{
int j, vmax,vmin;
int max = &vmax;
int min = &vmin;
int i = row_id;
int m = *ptr;
for(j = 0; j<5; j++){
if(m[i][j]>max)
{
max = m[i][j] ;
j++;
else
j++;
}
}
printf("%d", max);
return 0;
}
int main(void){
int n, i, j, vmin, vmax; // vmax - value of the maximum
int min = &vmin; // min - pointer to the minimum
int max = &vmax;
float vavg;
int avg = &vavg;
int m[5][5];
for(i = 0; i<5; i++)
{
for(j = 0; j<5; j++)
{
printf("ENTER A NUMBER: ");
scanf("%d", &n);
m[i][j] = n;
}
}
int ptr = &m;
stats(*ptr, 5,5,2, *max = NULL, *min = NULL, *avg=NULL);
return 0;
}发布于 2022-05-27 21:27:55
你的代码里到处都是bug。
例如,min和max不被声明为指针
int min = &vmin; // min - pointer to the minimum
int max = &vmax;此外,还不清楚为什么变量avg具有int类型,并由类型float *的指针表达式初始化。
float vavg;
int avg = &vavg;或者由二维数组的地址初始化int类型的变量int。
int ptr = &m;至于函数,如果函数只在一行上运行,那么就没有意义将整个二维数组传递给函数。
此外,函数的返回类型和返回值也没有意义。
该函数将不输出任何消息。决定是否输出消息的是函数的调用方。
此外,该函数还包含错误,您在其中重新声明其参数,例如
int max = &vmax;这也是没有道理的。
使用您的方法,可以通过以下方式声明和定义函数
#include <assert.h>
//...
void stats( const int *a, size_t n, int *max, int *min, float *avg )
{
assert( n != 0 );
*max = a[0];
*min = a[0];
float sum = a[0];
for( size_t i = 1; i < n; i++ )
{
sum += a[i];
if ( *max < a[i] )
{
*max = a[i];
}
else if ( a[i] < *min )
{
*min = a[i];
}
}
*avg = sum / n;
}给我打电话
int min = 0;
int max = 0;
float avg = 0.0f;;
//...
stats( m[2], 5, &max, &min, &avg );
printf( "max = %d\n", max );
printf( "min = %d\n", min );
printf( "average = %f\n", avg );发布于 2022-05-27 23:38:28
当您使用指针作为函数参数时,请小心。如果你有这样的东西:
int func(int *max){
}max,这里是一个指针,需要保存一个地址。因此,在这个函数中,当您需要使用它时,您需要使用*解除它的引用。例如:
int func(int *max){
*max = $someAddress
}https://stackoverflow.com/questions/72411009
复制相似问题