c - 我的指针和动态分配的实现是否正确?

标签 c pointers matrix

我正在研究 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/

相关文章:

c - K&R C书中的atoi函数

c++ - 为什么字符数组之间的这种比较不起作用?

java - 链表删除 : why don't we override the head with previous?

matrix - Octave:一组上的矩阵乘法

r - 滚动窗口后创建预测矩阵

c - Mpi_recv 在等待从属进程发送的消息时挂起

C语言未知&语法

c - CMake、clang、Visual studio下如何设置C11为编译标准?

c - 二维分配数组(固定列数)作为函数的返回值

C:(工作但未按预期进行)我的确定方法是编辑提供的矩阵(作为参数)但我只是希望它提供确定的