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
。
我创建了一个简单的程序,它在 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
。