я получаю два типа ошибок:Я получаю «несовместимый тип указателя», и я не понимаю, почему
жалобы составителя
pr.c: В функции «главный»:
pr.c: 20: 2: предупреждение: проходя аргумент 1 из 'printMatrix' от несовместимого типа указателя [по умолчанию включено]
pr.c: 9: 6: Примечание: ожидаемый «константный Int (*) [80] ', но аргумент тип 'INT (*) [80]
pr.c: 22: 2: предупреждение: проходя аргумент 1 из 'огней' от несовместимого типа указателя [по умолчанию включено]
pr.c: 10: 6: примечание: ожидаемый 'const int (*) [80]', но аргумент имеет тип 'int (*) [80]'
Кажется, компилятор жалуется на получение неконстантной функции, которая принимает const, но мне сказали, что это правильный способ использования const
...
#include <stdio.h>
#include <stdlib.h>
#define MAXCOL 80
#define MAXROW 20
#define randNormalize() srand(time(0))
void fillMatrix(int m[][MAXCOL], size_t rows, size_t cols);
void printMatrix(const int m[][MAXCOL], size_t rows, size_t cols);
void lights(const int m[][MAXCOL], size_t rows, size_t cols);
int star(const int m[][MAXCOL], int row, int col);
int main()
{
int m[MAXROW][MAXCOL];
randNormalize();
fillMatrix(m, 5, 5);
printMatrix(m, 5, 5);
lights(m, 5, 5);
return 0;
}
void fillMatrix(int m[][MAXCOL], size_t rows, size_t cols)
{
int i, j;
for(i = 0; i < rows; i++)
for(j = 0; j < cols; j++)
m[i][j] = rand()%21;
}
void printMatrix(const int m[][MAXCOL], size_t rows, size_t cols)
{
int i, j;
for(i = 0; i < rows; i++)
{
printf("\n");
for(j = 0; j < cols; j++)
printf("%d ", m[i][j]);
}
printf("\n");
}
void lights(const int m[][MAXCOL], size_t rows, size_t cols)
{
int i, j;
for(i = 1; i < rows - 1; i++)
{
printf("\n");
for(j = 1; j < cols - 1; j++)
{
if(star(m, i, j))
printf("*");
else
printf(" ");
}
}
printf("\n");
}
int star(const int m[][MAXCOL], int row, int col)
{
int i, j;
int sum = 0;
for(i = row - 1; i <= row + 1; i++)
for(j = col - 1 ; j <= col + 1; j++)
sum += m[i][j];
return (sum/9 > 10);
}
Я ищу лучшее решение, которое не использует указатели, поскольку это было связано с упражнением курса, в котором мы еще не рассмотрели их (хотя я их изучил).
'const'-thing отлично, но' fillMatrix' ожидает указатель на массив из 80 'int', в то время как вы передаете указатель на массив из 5. Это несовместимы. [Этот вопрос] (http://stackoverflow.com/questions/25790789/whats-the-difference-between-int-a5-and-inta5) может объяснить больше. – Kninnug
Почему вещь const прекрасно? Я хочу избавиться от него: ~ (. – YoTengoUnLCD
FYI, сообщения не являются двумя отдельными предупреждениями. Они являются частью одного и того же предупреждения. – kaylum