C 初始化二维动态结构的成员
我正在用C初始化动态二维结构,如下所示:C 初始化二维动态结构的成员,c,arrays,struct,malloc,C,Arrays,Struct,Malloc,我正在用C初始化动态二维结构,如下所示: typedef struct { int v; unsigned int t; } cb; cb **b; b = malloc( sizeof(*b) * s + (s * (e * sizeof(**b) ))); s和e是数组的维度(行和列大小) 如何在v设置为0的情况下初始化b 切勿将指针指向指针查找表用于动态分配2D数组。这种做法很普遍,但不好且不正确,导致分割和程序缓慢 相反,使用数组
typedef struct
{
int v;
unsigned int t;
} cb;
cb **b;
b = malloc( sizeof(*b) * s + (s * (e * sizeof(**b) )));
s和e是数组的维度(行和列大小)
如何在v设置为0的情况下初始化b 切勿将指针指向指针查找表用于动态分配2D数组。这种做法很普遍,但不好且不正确,导致分割和程序缓慢 相反,使用数组指针并在相邻内存中分配一个真正的2D数组:
cb (*arr)[y] = malloc( sizeof(cb[x][y]) );
arr[i][j] = something;
free(arr);
要将所有内容初始化为零,请使用calloc而不是malloc。要将所有内容初始化为给定值,必须使用循环并逐个赋值。切勿使用指针到指针查找表来动态分配二维数组。这种做法很普遍,但不好且不正确,导致分割和程序缓慢 相反,使用数组指针并在相邻内存中分配一个真正的2D数组:
cb (*arr)[y] = malloc( sizeof(cb[x][y]) );
arr[i][j] = something;
free(arr);
要将所有内容初始化为零,请使用calloc而不是malloc。要将所有内容初始化为给定值,必须使用循环并逐个赋值。切勿使用指针到指针查找表来动态分配二维数组。这种做法很普遍,但不好且不正确,导致分割和程序缓慢 相反,使用数组指针并在相邻内存中分配一个真正的2D数组:
cb (*arr)[y] = malloc( sizeof(cb[x][y]) );
arr[i][j] = something;
free(arr);
要将所有内容初始化为零,请使用calloc而不是malloc。要将所有内容初始化为给定值,必须使用循环并逐个赋值。切勿使用指针到指针查找表来动态分配二维数组。这种做法很普遍,但不好且不正确,导致分割和程序缓慢 相反,使用数组指针并在相邻内存中分配一个真正的2D数组:
cb (*arr)[y] = malloc( sizeof(cb[x][y]) );
arr[i][j] = something;
free(arr);
要将所有内容初始化为零,请使用calloc而不是malloc。要将所有内容初始化为给定值,必须使用循环并逐个赋值。使用
calloc
而不是malloc
使用calloc
而不是使用malloc
使用calloc
而不是使用malloc
使用calloc
而不是使用malloc
首先,你必须决定,C或C++。答案会有所不同。然后,这不是2D,而是它的模拟。不要这样做,C和C++都不行。在C语言中,您只需执行a(*b)[dim2]=malloc(sizeof(a[dim1][dim2])“代码>一次完成。@sergej e和j是尺寸。垂直和水平。我将编辑我的问题。您可以通过将malloc替换为calloc将v初始化为零。数组将在函数中本地使用吗?如果是这样,您只需编写cb arr[s][e]代码>来创建它。(它也应该相当小,适合堆栈。)首先,你必须决定,C或C++。答案会有所不同。然后,这不是2D,而是它的模拟。不要这样做,C和C++都不行。在C语言中,您只需执行a(*b)[dim2]=malloc(sizeof(a[dim1][dim2])“代码>一次完成。@sergej e和j是尺寸。垂直和水平。我将编辑我的问题。您可以通过将malloc替换为calloc将v初始化为零。数组将在函数中本地使用吗?如果是这样,您只需编写cb arr[s][e]代码>来创建它。(它也应该相当小,适合堆栈。)首先,你必须决定,C或C++。答案会有所不同。然后,这不是2D,而是它的模拟。不要这样做,C和C++都不行。在C语言中,您只需执行a(*b)[dim2]=malloc(sizeof(a[dim1][dim2])“代码>一次完成。@sergej e和j是尺寸。垂直和水平。我将编辑我的问题。您可以通过将malloc替换为calloc将v初始化为零。数组将在函数中本地使用吗?如果是这样,您只需编写cb arr[s][e]代码>来创建它。(它也应该相当小,适合堆栈。)首先,你必须决定,C或C++。答案会有所不同。然后,这不是2D,而是它的模拟。不要这样做,C和C++都不行。在C语言中,您只需执行a(*b)[dim2]=malloc(sizeof(a[dim1][dim2])“代码>一次完成。@sergej e和j是尺寸。垂直和水平。我将编辑我的问题。您可以通过将malloc替换为calloc将v初始化为零。数组将在函数中本地使用吗?如果是这样,您只需编写cb arr[s][e]代码>来创建它。(为了放在堆栈上,它也应该相当小。)您能进一步澄清一下吗?@Maxsteelarr
是指向大小y
的“cb数组”的指针。将其设置为指向大小为x
timesy
的二维“cb数组”的第一个元素。由于指针算术规则与任何其他指针一样适用于数组指针,arr[i]
将为您提供数组编号i
,就像int*ptr;ptr[i]
将为您提供int
numberi
。由于arr[i]
是一个数组,arr[i][j]
是该数组中的一个项目。请您进一步澄清一下,好吗?@Maxsteelarr
是指向y
大小的“cb数组”的指针。将其设置为指向大小为x
timesy
的二维“cb数组”的第一个元素。由于指针算术规则与任何其他指针一样适用于数组指针,arr[i]
将为您提供数组编号i
,就像int*ptr;ptr[i]
将为您提供int
numberi
。由于arr[i]
是一个数组,arr[i][j]
是该数组中的一个项目。请您进一步澄清一下,好吗?@Maxsteelarr
是指向y
大小的“cb数组”的指针。将其设置为指向大小为x
timesy
的二维“cb数组”的第一个元素。由于指针算术规则仅适用于数组指针