Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言扩展矩阵_C_Matrix_Malloc_Realloc - Fatal编程技术网

用C语言扩展矩阵

用C语言扩展矩阵,c,matrix,malloc,realloc,C,Matrix,Malloc,Realloc,我在C中有一个矩阵,我想创建另一个比第一个矩阵有两行的矩阵。那些增加的行我想有第一个矩阵的值,但符号改变了。我试图理解动态分配,但我不明白我错在哪里。编译器说的错误是:“从void*到int*的转换无效”。这是我的密码: #include <stdio.h> #include<conio.h> #include<stdlib.h> int *extend_matrix=NULL; int *matrix=NULL; int *negative_matrix=N

我在C中有一个矩阵,我想创建另一个比第一个矩阵有两行的矩阵。那些增加的行我想有第一个矩阵的值,但符号改变了。我试图理解动态分配,但我不明白我错在哪里。编译器说的错误是:“
从void*到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*extend_矩阵=NULL;
int*矩阵=NULL;
int*负矩阵=NULL;
内部主(空)
{
int i,j,m,n;
printf(“输入矩阵的行数和列数\n”);
scanf(“%d%d”,&m,&n);
int*矩阵=(int*)malloc(m*n*sizeof(int));
int*负矩阵=(int*)malloc(m*n*sizeof(int));
printf(“输入第一个矩阵的元素\n”);
对于(i=0;i因为(i=0;i似乎您有点困惑。让我来写一个简短的示例代码

编辑: 好的,走吧

在这里你可以找到我的例子。我还没有完成它,但只是给出了如何完成它的输入

请注意这一点:

从66行到68行,我们有以下代码:

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

您可能只会从堆中的第一个矩阵(而不是每个元素中的一个)中释放出它自己的内容。

您似乎有点困惑。让我来写一个简短的示例代码

编辑: 好的,走吧

在这里你可以找到我的例子。我还没有完成它,但只是给出了如何完成它的输入

请注意这一点:

从66行到68行,我们有以下代码:

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

您将只从堆中的第一个矩阵(而不是每个元素中的一个)中释放它自己的内容。

您的代码中存在多个问题。您说的是
int*matrix
,然后将其称为
matrix[i][j]
。那不行。你想实现什么?在把
矩阵声明为
int*matrix
之后,
matrix[i][j]
看起来很糟糕,它甚至不应该编译。至于串联:这取决于你的矩阵是如何布置的-你可以使用你自己的循环或者干脆
memcpy()。我是说int *矩阵,但是我怎么能给它加值呢?我不知道。错误信息强烈地暗示你是编译成C++的。不要编译C代码作为C++,只会引起悲伤。你的代码中存在多个问题。你说的是代码> int *矩阵< /代码>,然后引用它作为代码>矩阵[i] [j]。
。那不行。你想实现什么?在把
矩阵声明为
int*matrix
之后,
matrix[i][j]
看起来很糟糕,它甚至不应该编译。至于串联:这取决于你的矩阵是如何布置的-你可以使用你自己的循环或者干脆
memcpy()<代码> >我是说int *矩阵,但是我如何才能给它添加值呢?我不知道。错误信息强烈暗示你正在编译它作为C++。不要编译C代码作为C++,只会引起悲伤。