Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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_Arrays_Pointers - Fatal编程技术网

C编译器警告:来自不兼容指针类型的赋值

C编译器警告:来自不兼容指针类型的赋值,c,arrays,pointers,C,Arrays,Pointers,这是我的学校项目,我只做骨架,但编译器说 [警告]来自不兼容指针类型的分配 我换了一些指针,但没用。有人能帮我吗 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int *col_num, *row_num, **matrix; double k, l; int i, j; printf("Enter your column numbe

这是我的学校项目,我只做骨架,但编译器说

[警告]来自不兼容指针类型的分配

我换了一些指针,但没用。有人能帮我吗

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

    int *col_num, *row_num, **matrix;
    double k, l;
    int i, j;

    printf("Enter your column number:\n");
    scanf("%d", &col_num);
    printf("Enter your row number:\n");
    scanf("%d", &row_num);

    matrix[*col_num] = (int **) malloc(*col_num * sizeof(int));
    if (matrix[*col_num] == NULL)
        printf("No free Memory!");
    matrix[*row_num] = (int **) malloc(*row_num * sizeof(int));
    if (matrix[*row_num] == NULL)
        printf("No free Memory!");

    for (i = 0; i < *col_num; i++)
        for (j = 0; j < *row_num; j++)
        {

            printf("Please Enter %d%d matrix:", i + 1, j + 1);
            scanf("%lf", &matrix[i][j]);
        }

    for (i = 0; i < *col_num; i++)
    {
        for (j = 0; j < *row_num; j++)
        {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    free(matrix);
    return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
整数*列数,*行数,**矩阵;
双k,l;
int i,j;
printf(“输入列号:\n”);
scanf(“%d”和列数);
printf(“输入您的行号:\n”);
scanf(“%d”,行数(&U);
矩阵[*col_num]=(int**)malloc(*col_num*sizeof(int));
if(矩阵[*col_num]==NULL)
printf(“没有可用内存!”);
矩阵[*行数]=(int**)malloc(*行数*大小(int));
if(矩阵[*行数]==NULL)
printf(“没有可用内存!”);
对于(i=0;i<*col_num;i++)
对于(j=0;j<*行数;j++)
{
printf(“请输入%d%d矩阵:”,i+1,j+1);
scanf(“%lf”和矩阵[i][j]);
}
对于(i=0;i<*col_num;i++)
{
对于(j=0;j<*行数;j++)
{
printf(“%d”,矩阵[i][j]);
}
printf(“\n”);
}
自由(矩阵);
返回0;
}

首先,在这一部分:

int *col_num, *row_num, **matrix;

printf("Enter your column number:\n");
scanf("%d", &col_num);
printf("Enter your row number:\n");
scanf("%d", &row_num);
col_num
row_num
不应该是指针,您可以这样做:

int col_num, row_num, **matrix;

printf("Enter your column number:\n");
scanf("%d", &col_num);
printf("Enter your row number:\n");
scanf("%d", &row_num);
此外,检查
scanf()
的返回值也不是一个坏主意,以防用户输入一些垃圾

您似乎还在程序中编写了很多类似于
matrix[*row_num]=../
的东西,这是不必要的。您不应该在任何地方引用
*行数
*列数
。相反,只需自己调用
row_num
col_num
,这应该没问题

如果您想使用
**matrix
,这在一开始很难使用,那么您需要小心地使用它来完成此任务。请看

首先从以下方面开始:

  • 为行分配内存:

    int **matrix = malloc(row_num * sizeof(*matrix)); /* check return value */
    
  • 然后,对于每一行,
    malloc()

    for (i = 0; i < row_num; i++) {
        matrix[i] = malloc(col_num * sizeof(*matrix[i])); /* check return value */
    
使用这些思想后,您的代码应该是这样的(除非我误解了代码的用途):

#包括
#包括
int
main(int argc,char*argv[]){
int row_num,col_num,**矩阵;
int i,j;
printf(“输入列号:”);
如果(scanf(“%d”,&col_num)!=1){
printf(“无效输入\n”);
退出(退出失败);
}
printf(“输入行号:”);
如果(scanf(“%d”,&row_num)!=1){
printf(“无效输入\n”);
退出(退出失败);
}
矩阵=malloc(row_num*sizeof(*matrix));/*或sizeof(int*)*/
if(!矩阵){
printf(“无法为指针分配内存。\n”);
退出(退出失败);
}
对于(i=0;i
包括行号在内的全部错误是什么?
scanf(“%lf”、&matrix[i][j])
%lf
-->
%d
还有
矩阵的分配错误您在想什么
矩阵[*col_num]=(int**)malloc(*col_num*sizeof(int))
Dos?您应该获得有关变量指针和地址的基本知识
row_num
col_num
是使用
scanf(“%d”和&col_num)指向int的(未初始化)指针将输入值指定为其指向的地址。(请记住:您没有在那里分配内存)然后您取消引用
col_num
matrix[*col_num]=(int**).
I second@Gerhardh。从一个非常简单的程序开始,它从标准输入读取一个int并打印它。然后才进入一维数组。确保你明白这一点。然后再继续(实现的各种方法)二维数组。
free(matrix[i]);

free(matrix);
#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char *argv[]) {
    int row_num, col_num, **matrix;
    int i, j;

    printf("Enter your column number: ");
    if (scanf("%d", &col_num) != 1) {
        printf("Invalid input\n");
        exit(EXIT_FAILURE);
    }

    printf("Enter your row number: ");
    if (scanf("%d", &row_num) != 1) {
        printf("Invalid input\n");
        exit(EXIT_FAILURE);
    }

    matrix = malloc(row_num * sizeof(*matrix)); /* Or sizeof(int *) */
    if (!matrix) {
        printf("Cannot allocate memory for pointer.\n");
        exit(EXIT_FAILURE);
    }

    for (i = 0; i < row_num; i++) {
        matrix[i] = malloc(col_num * sizeof(*matrix[i])); /* Or sizeof(int) */
        if (!matrix[i]) {
            printf("Cannot allocate memory for pointer.\n");
            exit(EXIT_FAILURE);
        }

        for (j = 0; j < col_num; j++) {
            printf("Please Enter %d%d matrix: ",i+1,j+1);
            if (scanf("%d", &matrix[i][j]) != 1) {
                printf("Invalid input\n");
                exit(EXIT_FAILURE);
            }
        }
    }

    printf("Your 2D array:\n");
    for (i = 0; i < row_num; i++) {
        for (j = 0; j < col_num; j++) {
            printf("%d ", matrix[i][j]);
        }
        free(matrix[i]);
        matrix[i] = NULL;
        printf("\n");
    }

    free(matrix);
    matrix = NULL;

    return 0;
}