[解決済み] C言語では、式はオブジェクト型へのポインタを持たなければならない
2022-03-03 17:48:18
質問
関数や配列でポインターを使おうとしているのですが、mainでreport関数を呼び出すと、Expression must have a pointer to object typeというエラーがずっと出ます。いろいろと試してみました。何もかも試しましたが、うまくいかないようです。どなたか、私が何を間違えているのか、教えていただけませんか?
注
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);
}
解決方法は?
レポート機能でその行を削除して、以下のレポート機能をご覧ください。
int row = 0, column = 0;
関数内では、リストを
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;
}
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み] テスト
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み】C言語のフォーマット文字列でデータ引数が使用されない [重複]。
-
[解決済み】シンプルなC言語のscanfが機能しない?重複
-
[解決済み】c - 警告:関数 'printf'の暗黙の宣言
-
[解決済み] C++の関数に2次元配列を渡す