我在C中是全新的。我的任务是在每一行中找到最小值,然后用矩阵执行一些转换。我使用动态2d数组但突然出现了对指针的误解。 Visual Studio向我显示了与函数min
:
Warning 2 warning C4047: ':' : 'int *' differs in levels of indirection from 'int'
Warning 1 warning C4047: '<' : 'int *' differs in levels of indirection from 'int'
Warning 3 warning C4047: '=' : 'int' differs in levels of indirection from 'int *'
Error 1 error C2059: syntax error : 'type'
我不知道为什么会出现这些错误。
void transformMatrix(int** arr, int rowCount, int colCount)
{
int i,j;
int minElem;
for (i=0; i < rowCount; i++)
{
minElem = min (arr[i], colCount);
for (j=0; j < colCount; j++)
{
if (i%2 ==0)
{
arr[i][j] -= minElem;
}
else
{
arr[i][j] += minElem;
}
}
}
}
int min(int* arr, int elemCount)
{
int minEl = arr[0];
int i;
for (i=1; i < elemCount; i++)
{
if (arr[i]<minEl)
{
minEl = arr[i];
}
}
return minEl;
}
答案 0 :(得分:1)
功能min
标识符已在MSVC stdlib.h
中用作宏
#define min(a,b) (((a) < (b)) ? (a) : (b))
将您的功能重命名为其他内容。
答案 1 :(得分:0)
未发现错误。这是我使用以下结果运行的代码并且工作正常。如果仍然给它,请通知我。所以我可以删除它。
结果
12 13 14
13 14 15
14 15 16
Transforming
0 1 2
1 2 3
2 3 4
#include <stdio.h>
#include <stdlib.h>
int min(int* arr, int elemCount)
{
int minEl = arr[0];
int i;
for (i=1; i < elemCount; i++)
{
if (arr[i]<minEl)
{
minEl = arr[i];
}
}
return minEl;
}
void transformMatrix(int** arr, int rowCount, int colCount)
{
int i,j;
int minElem;
for (i=0; i < rowCount; i++)
{
minElem = min (arr[i], colCount);
for (j=0; j < colCount; j++)
{
if (i%2 ==0)
{
arr[i][j] -= minElem;
}
else
{
arr[i][j] += minElem;
}
}
}
}
int main()
{
int **aray;
aray = (int **) malloc(sizeof(int *) * 3);
aray[0] = (int *) malloc(sizeof(int) * 3);
aray[1] = (int *) malloc(sizeof(int) * 3);
aray[2] = (int *) malloc(sizeof(int) * 3);
for (int i=0; i<3; i++)
{
for (int j=0; j<3; j++){
aray[i][j] = i+j+12;
printf("%d \t", aray[i][j]);
}
printf("\n");
}
printf("Transforming \n");
transformMatrix(aray, 3, 3);
for (int i=0; i<3; i++)
{
for (int j=0; j<3; j++){
aray[i][j] = i+j;
printf("%d \t", aray[i][j]);
}
printf("\n");
}
return 0;
}