Ausdruck muss ein Zeiger auf object-Typ in C
Ich versuche, mit Zeigern bei Funktionen und arrays, und wenn ich den Aufruf der report-Funktion in Haupt -, bekomme ich immer einen error-Ausdruck muss einen Zeiger auf Objekt geben. Ich habe alles versucht. Nichts scheint zu funktionieren. Kann jemand bitte lassen Sie mich wissen, was ich falsch mache?
Bitte beachten Sie: ohne die report
Funktion, wenn ich rufen Sie die anderen Funktionen getrennt in main
es funktioniert. Es funktioniert nicht nur mit der report
Funktion.
#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);
}
Haben Sie versucht, zu Debuggen Ihrer Anwendung zu verengen die Stelle, wo der Fehler erscheint?
ja, Fehler wird in der report-Funktion.
er hat einen Kompilierungsfehler.
Kann man vielleicht teilen, die Fehlermeldung mit uns?
ja, Fehler wird in der report-Funktion.
<conio.h>
– sind Sie auf MS-DOS?er hat einen Kompilierungsfehler.
Kann man vielleicht teilen, die Fehlermeldung mit uns?
InformationsquelleAutor anansharm | 2013-11-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der report-Funktion entfernen Sie diese Zeile und siehe unten report-Funktion:
Funktionen verwenden Liste als
Call-Liste als
nicht als
Hier ist der vollständige code:
Sie statisches array.So müssen Sie array der Breite auf Funktionen. Für dynamisch zugewiesenen arrays verwenden, können Sie Zeiger (int *Liste) für Funktionen.
Sie können auch diesen links Folgen: - c-faq.com/aryptr/pass2dary.html - stackoverflow.com/questions/8767166/...
InformationsquelleAutor tyilmaz
Vielleicht können Sie den parameter ändern, Liste[0][0] zu Liste.
Als Liste ist ein Zeiger auf int, aber Liste[0][0] ist nur ein int. Ihre Art ist anders, und der erste parameter in Funktionen, die einen Zeiger benötigt wird.
🙂
InformationsquelleAutor chinchila
Machst du deine arrays völlig falsch überall.
Vergessen
&
und vergessen*
für die Zeit. Sie brauchen das nicht in diesem Programm.Ihre
list
ist einint[3][5]
, nicht einint*
und nichts anderes. Deklarieren Sie Sie als solche in allen Funktionen.und so weiter. Zugriff in der Funktion wie hier:
nicht
list+row*column_count+column
Pass die Liste an Funktionen wie diese:
nicht
rowaverage(&list[0][0], ....
,Ich habe keine Ahnung, warum Sie schrieb
report
anders als all die anderen Funktionen, aber es spielt keine Rolle, da alle anderen Funktionen sind völlig falsch auch. Wenn Sie wirking, die es durch schiere Glück.Pick-up ein gute C-Buch und lies es.
Es ist OK zu schreiben, die ungewöhnlich kompliziert und/oder suboptimalen code als übung, aber Sie sollten uns warnen, über, vorher, so dass wir keine Zeit vergeuden zu versuchen, es zu korrigieren.
InformationsquelleAutor n.m.
So, du bist ein übergeben ein Zeiger auf int im Berichts-Funktion:
Aber dann sind Sie mit der Liste in der report-Funktion als Zeiger auf Zeiger auf int:
Aber es ist nicht ein Zeiger auf Zeiger auf int. Es hat gerade ein Typ int*. Also "Liste" ist aufgelöst twicely im Berichts-Funktionen. Das ist falsch.
Können Sie es zu beheben, wenn Sie nur "Liste" als parameter in Funktionsaufrufen in dem Bericht() ohne "[0][0]":
Ich sehe, was Sie reden. Behoben.
InformationsquelleAutor Michael