C中的多维数组INT

时间:2015-02-22 13:45:20

标签: c multidimensional-array struct int

我创建了一个简单的程序,在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:警告:赋值使用整数指针   没有演员[默认启用] opt-> rangees_content [line] =   TMP;

有人有想法吗?

由于

1 个答案:

答案 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; }