【问题标题】:extend matrix in C在 C 中扩展矩阵
【发布时间】:2013-03-03 21:18:07
【问题描述】:

我在 C 中有一个矩阵,我想创建另一个比第一个矩阵具有双行的矩阵。那些添加的行我想拥有第一个矩阵的值,但符号已更改。我试图了解动态分配,但我不明白我错在哪里。编译器说的错误是:“invalid conversion from void* to int*"。这是我的代码:

#include <stdio.h>
#include<conio.h>
#include<stdlib.h>
int *extend_matrix=NULL;
int *matrix=NULL;
int *negative_matrix=NULL;
int main(void)
{
    int i,j,m,n;
    printf("Enter the number of rows and columns of  matrix\n");
    scanf("%d%d", &m, &n);
    int *matrix = (int *)malloc(m * n * sizeof(int));
    int *negative_matrix=(int*)malloc(m*n*sizeof(int));
    printf("Enter the elements of first matrix\n");
    for (  i = 0 ; i < m ; i++ )
        for ( j = 0 ; j < n ; j++ )
            scanf("%d", &matrix[i][j]);
    for(i = 0 ; i < m ; i++)
        for(j = 0 ; j < n ; j++)
            printf("the matrix is: \n",matrix[i][j]);
    negative_matrix=-matrix[i][j];
    for(i=0;i<m+m;i++)
        extend_matrix[i]=realloc(matrix[i],sizeof(int)*(m+m));
    for(j=0;j<n;j++)
        extend_matrix[j]=realloc(matrix[j],sizeof(int)*n);
    extend_matrix[i][j]=matrix[i][j]+negative_matrix[i][j];//how to concatenate them?
    getch();
    return 0;
}

【问题讨论】:

  • 您的代码存在多个问题。您说的是int *matrix,然后将其称为matrix[i][j]。那是行不通的。你想达到什么目的?
  • 在将matrix 声明为int *matrix 之后,matrix[i][j] 看起来很糟糕,它甚至不应该编译。至于连接:这取决于您的矩阵的布局方式 - 您可以使用自己的循环或简单地使用memcpy()
  • 我说的是 int * 矩阵,但是我怎样才能给它添加值呢?我不知道。
  • 错误消息强烈建议您将其编译为 C++。不要把C代码编译成C++,那样只会让人伤心。

标签: c matrix malloc realloc


【解决方案1】:

看来你有点糊涂了。让我写一个简短的示例代码

编辑: 好的,去here

在那里你会找到我的例子。我还没有完成它,只是就如何完成它提供了意见。

请注意这一点:

从 66 到 68 行我们有这个代码:

for (i = 0; i < rows; i++){
    free(first_matrix[i]);
}

这是因为我们矩阵的每个元素都是一个指针,它们都指向一个分配在堆上的数组。所以,如果你刚刚释放了 first_matrix,像这样:

free(first_matrix);

你只会从堆上它自己的内容中释放 first_matrix(而不是它的每个元素)

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多