我想创建一个void*
s的动态数组,每个void*
将指向2d int
矩阵。
所有矩阵都具有相同的行数和列数。
如何在C中执行此操作?
初始化后我该怎么办:void **myArray = NULL;
更具体地说,我想创建一个带有2个参数的函数:
int foo( void* matrix, void** ptrArray)
matrix
指向2d int
矩阵,ptrArray
指向void*
s数组,foo
返回ptrArray
的大小}。
我希望foo
从int
获取2d matrix
矩阵并对其进行一些操作,例如在其中切换一些数字。对于我所做的每一个更改,我想分配一个新矩阵,并在ptrArray
中保存指向它的指针。
答案 0 :(得分:0)
您必须动态分配每个矩阵。
出于示例的目的,我将假设您将“2d int
矩阵”创建为线性16 int
数组。
#define MATRIX_SIZE 16
int foo(void* matrix, void** ptrArray){
assert(ptrArray == NULL);
int result = 0;
int* first = malloc(MATRIX_SIZE * sizeof(int));
//do stuff to matrix
for(int i = 0; i < MATRIX_SIZE; ++i){
first[i] = matrix[i];
}
ptrArray = malloc((++result) * sizeof(void*));
ptrArray[0] = (void*)first;
int* second = malloc(MATRIX_SIZE * sizeof(int));
//do stuff to matrix
for(int i = 0; i < MATRIX_SIZE; ++i){
second[i] = matrix[i];
}
ptrArray = realloc((++result) * sizeof(void*));
ptrArray[1] = (void*)second;
.
.
.
return result;
}
答案 1 :(得分:0)
假设您在其他地方分配了void ** twodarray,并将NULL放在此数组的最后一个+ 1元素中。
我想你想做这样的事情;
int function(void **twodarray,void **ptrarray)
{
int i=0
for(i=0;twodarray[i]!=NULL;i++)/*repeat till twodarray points to NULL*/
{
perform some operation on twodarray[i];
ptrarray[i]=twodarray[i];
}
return i+1;/*return length of ptrarray */
}
通过这种方式,您可以判断出有没有矩阵。 但是你必须通过其他回复中解释的方法来计算void ** twodarray的分配。