我创建了一个简单的程序,在c。
中使用INT的多维数组他的设计结构为:
typedef struct s_control
{
int rangees;
int **rangees_content;
} t_control;
然后,我malloc结构等... 但是,当我尝试编辑这样的案例时:
opt->rangees_content[line] = tmp;
其中“tmp”是由“int tmp;
”
然后我编译并得到:
./ main.c:9:30:警告:赋值使用整数指针 没有演员[默认启用] opt-> rangees_content [line] = TMP;
有人有想法吗?
由于
答案 0 :(得分:1)
您正在尝试将一个整数分配给int
指针,这不应该完成,在尝试取消引用指针时会导致未定义的行为。
换句话说,int **
表示可以像二维数组一样访问它,您正在访问其中一个类型为int *
的维度,并尝试协助{{1}对它来说。
这是如何使用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;
}
。