我试图在函数和数组中使用指针,当我在main中调用report函数时,我不断收到错误Expression必须有一个指向对象类型的指针。我尝试了一切。似乎什么都没有用。谁能告诉我我做错了什么?
请注意:如果没有report
功能,如果我在main
中单独调用其他功能则可行。它不仅适用于report
功能。
#include <stdio.h>
#include <conio.h>
void print(int *list, int row_count, int column_count);
void rowaverage(int *list, int row_count, int column_count);
void allaverage(int *list, int row_count, int column_count);
void largest(int *list, int row_count, int column_count);
void report(int *list, int row_count, int column_count);
int main()
{
int i = 1, row, column;
int list[3][5];
printf("Enter 3 sets of 5 integers::\n");
for (row = 0; row < 3; row++)
{
printf("Elements in the %d set are ::\n", row);
for (column = 0; column < 5; column++)
{
printf("Element No. %d is ", i++);
scanf("%d", &list[row][column]);
}
printf("\n");
i = 1;
}
printf("The elements in array are:\n");
report(&list[0][0], row, column);
getch();
return 0;
}
void print(int *list, int row_count, int column_count)
{
int column, row;
for (row = 0; row < row_count; row++)
{
for (column = 0; column < column_count; column++)
{
printf("%8d", *(list + row * column_count + column));
}
printf("\n");
}
}
void rowaverage(int *list, int row_count, int column_count)
{
int column, row;
for (row = 0; row < row_count; row++)
{
float sum = 0, count = 0;
for (column = 0; column < column_count; column++)
{
sum += *(list + row * column_count + column);
count++;
}
printf("Average of row %d is %.2f\n", row, (sum / count));
}
}
void allaverage(int *list, int row_count, int column_count)
{
int column, row;
float sum = 0, count = 0;
for (row = 0; row < row_count; row++)
{
for (column = 0; column < column_count; column++)
{
sum += *(list + row * column_count + column);
count++;
}
}
printf("Average of all elements in array is %.2f\n", (sum / count));
}
void largest(int *list, int row_count, int column_count)
{
int column = 0, row = 0;
int largest = *(list + row * column_count + column);
for (row = 0; row < row_count; row++)
{
for (column = 0; column < column_count; column++)
{
if (largest < *(list + row * column_count + column))
{
largest = *(list + row * column_count + column);
}
}
}
printf("The largest number in the array is %d\n", largest);
}
void report(int *list, int row_count, int column_count)
{
int row = 0, column = 0;
print(list[0][0], row, column);
printf("\n");
rowaverage(list[0][0], row, column);
printf("\n");
allaverage(list[0][0], row, column);
printf("\n");
largest(list[0][0], row, column);
}
答案 0 :(得分:2)
在报告功能中删除该行并查看以下报告功能:
int row = 0, column = 0;
在函数中,使用list as
int list[][5]
呼叫列表为
list
不是
list[0][0]
以下是完整的代码:
#include <stdio.h>
#include <stdlib.h>
void print(int list[][5], int row_count, int column_count)
{
int column, row;
for (row = 0; row < row_count; row++) {
for (column = 0; column < column_count; column++)
printf("%8d", list[row][column]);
printf("\n");
}
}
void rowaverage(int list[][5], int row_count, int column_count)
{
int column, row;
for (row = 0; row < row_count; row++) {
float sum = 0, count = 0;
for (column = 0; column < column_count; column++) {
sum += list[row][column];
count++;
}
printf("Average of row %d is %.2f\n", row, (sum / count));
}
}
void allaverage(int list[][5], int row_count, int column_count)
{
int column, row;
float sum = 0, count = 0;
for (row = 0; row < row_count; row++) {
for (column = 0; column < column_count; column++) {
sum += list[row][column];
count++;
}
}
printf("Average of all elements in array is %.2f\n", (sum / count));
}
void largest(int list[][5], int row_count, int column_count)
{
int column = 0, row = 0;
int largest = list[0][0];
for (row = 0; row < row_count; row++) {
for (column = 0; column < column_count; column++) {
if (largest < list[row][column]) {
largest = list[row][column];
}
}
}
printf("The largest number in the array is %d\n", largest);
}
void report(int list[][5], int row_count, int column_count)
{
print(list, row_count, column_count);
printf("\n");
rowaverage(list, row_count, column_count);
printf("\n");
allaverage(list, row_count, column_count);
printf("\n");
largest(list, row_count, column_count);
}
int main()
{
int i = 1, row, column;
int list[3][5];
printf("Enter 3 sets of 5 integers::\n");
for (row = 0; row < 3; row++) {
printf("Elements in the %d set are ::\n", row);
for (column = 0; column < 5; column++) {
printf("Element No. %d is ", i++);
scanf("%d", &list[row][column]);
}
printf("\n");
i = 1;
}
printf("The elements in array are:\n");
report(list, row, column);
return 0;
}
答案 1 :(得分:0)
所以你在报告函数中传递指向int的指针:
int list[3][5];
report(&list[0][0], row, column);
...
void report(int *list, int row_count, int column_count)
...
但是你在报告函数中使用list作为指向int的指针:
list[0][0]
但它不是指向int的指针。它只有一种int *。所以&#34; list&#34;在报告函数中被解除引用两次。那是错的。
如果你只使用&#34; list&#34;你可以修复它。作为函数调用中的参数,在report()中没有&#34; [0] [0]&#34;:
rowaverage(list, row, column);
答案 2 :(得分:0)
也许您可以将参数列表[0] [0] 更改为列表。 由于list是指向int的指针,但list [0] [0]只是一个int。它们的类型不同,并且函数中的第一个参数是一个指针。 :)
答案 3 :(得分:0)
到处都是你的阵列完全错误。
忘记&
并暂时忘记*
。你不需要这个程序。
您的list
是int[3][5]
,而不是int*
,而不是其他任何内容。在所有函数中都声明它。
void rowaverage(int list[3][5], ...
等等。在以下函数中访问它:
list[row][column]
不是list+row*column_count+column
将列表传递给这样的函数:
rowaverage(list, ...
不是rowaverage(&list[0][0], ....
,
我不知道你为什么以不同于所有其他函数的方式编写report
,但这并不重要,因为所有其他函数也完全错误。如果他们在逃避,那就是纯粹的运气。
拿起一本好的C书并阅读。