我正在研究 C/C++ 中的指针,作为学习这个问题的小项目,我正在尝试开发一个简单的应用程序来进行矩阵运算。我想问我使用指针和动态分配的这种方式是否正确,或者我弄错了。谢谢:)
#include <stdlib.h>
#include <stdio.h>
int numberRows;
int numberCollumns;
void getSize()
{
printf("Write down size of matrix in format Rows Collumns: ");
scanf("%i %i", &numberRows, &numberCollumns);
}
void getMatrix(int *m[])
{
int x = 0;
int y = 0;
while(x<numberRows)
{
while(y<numberCollumns)
{
scanf("%i", &m[x][y]);
y++;
}
x++;
y = 0;
}
}
void writeMatrix(int *m[])
{
int x = 0;
int y = 0;
while(x<numberRows)
{
while(y<numberCollumns)
{
printf("%i ", m[x][y]);
y++;
}
printf("\n");
x++;
y = 0;
}
}
int main()
{
getSize();
int **matrix;
matrix = (int**)malloc(numberRows*sizeof(int*));
int x = 0;
while(x < numberCollumns)
{
matrix[x] = (int*)malloc(numberCollumns*sizeof(int));
x++;
}
getMatrix(matrix);
printf("\n\nMatrix: \n");
writeMatrix(matrix);
return 0;
}
最佳答案
我发现一个问题:
while(x < numberCollumns)
{
matrix[x] = (int*)malloc(numberCollumns*sizeof(int));
x++;
}
您的循环条件错误。如果行数和列数不匹配怎么办?
另外,我没有看到任何对 free
的相应调用。
至于代码风格,您的 while 循环看起来会比 for 循环更好:
for(int x = 0; x < numberRows; ++x)
{
matrix[x] = (int*)malloc(numberCollumns*sizeof(int));
}
旁注
该代码是纯 C 代码(除了 malloc
返回值的转换之外)。 C++ 代码看起来会有很大不同。
关于c - 我的指针和动态分配的实现是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12924741/