C中INT的多维数组

Multidimensional array of INT in C

我创建了一个简单的程序,它在 c 语言中使用了 INT 的多维数组。

他被设计成一个结构:

typedef struct s_control
{
    int rangees;
    int **rangees_content;
} t_control;

然后,我 malloc 结构等... 但是,当我尝试编辑这样的案例时:

opt->rangees_content[line] = tmp;

其中 "tmp" 是由“int tmp;”声明的 int“

然后我编译得到:

./main.c:9:30: warning: assignment makes pointer from integer without a cast [enabled by default] opt->rangees_content[line] = tmp;

有人有想法吗?

谢谢

您正在尝试将一个整数分配给一个 int 指针,不应该这样做,它会在尝试取消引用指针时导致未定义的行为。

换句话说,int ** 意味着它可以像二维数组一样访问,您正在访问其中一个具有类型 int * 的维度,并试图分配一个 int 到它。

这是一个如何使用 int ** 指针的示例

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

typedef struct s_control
{
    size_t rangees;
    int **rangees_content;
} t_control;

int
main()
{
    t_control control;
    size_t    rowSize;
    /* this is irrelevant to your problem, just initialize the random seed */
    srand(time(NULL));
    /* Initialize the struct members */
    control.rangees         = 10;
    control.rangees_content = malloc(control.rangees * sizeof(int *));
    /*                                                        ^ 
     * Above, you allocate 'control.rangees' pointers of 'int'
     */
    if (control.rangees_content == NULL)
        return -1;
    rowSize = 10; /* this value can be changed */
    for (size_t i = 0 ; i < control.rangees ; ++i)
    {
        /* this is the i-th row of the array and has type 'int *', malloc it */
        control.rangees_content[i] = malloc(rowSize * sizeof(int));
        if (control.rangees_content[i] == NULL)
        {
            /* always handle malloc failure */
            while (i >= 0)
                free(control.rangees_content[i--]);
            free(control.rangees_content);

            return -1;
        }
        /* Iterate through the array elements, and assign random values to them */
        for (size_t j = 0 ; j < rowSize ; ++j)
            control.rangees_content[i][j] = rand() % 100;
    }
    /* print and free the array */
    for (size_t i = 0 ; i < control.rangees ; ++i)
    {
        for (size_t j = 0 ; j < rowSize ; ++j)
            printf("%5d", control.rangees_content[i][j]);
        printf("\n");
        free(control.rangees_content[i]);
    }
    free(control.rangees_content);
    return 0;
}

上述程序,生成随机数并用它们填充数组,然后将它们输出到stdout