我正在尝试在调用函数中接收2D指针数组。 我从main函数调用了一个函数子集,子集函数将返回一个2D指针数组
int **subsets(int *A, int n1, int *len1)
{
int **arr;
num = pow(2, n1);
*len1 = num;
arr = (int **) malloc(num * sizeof(int *));
for (i = 0; i < num; i++)
{
arr[i] = (int *)malloc(sizeof(int));
}
return arr;
}
在这个函数中,我动态地声明一个2D数组int **arr
,然后尝试在main函数中接收这个返回数组。请注意,而不是*len1
我为2D数组分配行值,而2D数组的列值将基于子集不同,就像给定的array[1,2,3]
一样,它将是这样的:
[
[],
[1],
[1, 2],
[1, 2, 3],
[1, 3],
[2],
[2, 3],
[3],
]
我基本上是在做子集问题,但是无法在main函数中接收2D返回数组,有人可以告诉我如何在调用函数中接收这个2D指针数组。
感谢回复.. :)
[更新from comment:]
这就是我尝试从main
函数调用它的方法,但这是错误的:
int **res = subsets(A, n1, &len1);
int i = 0, j = 0;
for(i = 0; i < len1; i++)
{
for(j = 0; j < n1; j++)
{
printf("%d", res[i][j]);
}
printf("\n");
}
因为每行的n1(列)值不同。
答案 0 :(得分:0)
我不太确定你想要达到什么目标,但我想以下代码可以帮到你:
posts_by_users
纯粹为了简洁起见,省略了检查#include <stdio.h>
#include <stdlib.h>
int **subsets(int A);
int main(void)
{
int **arr = subsets(3);
int i, j;
for(i = 0; i < 1 << 3; i++)
{
for(j = 0; arr[i][j]; j++)
{
printf("%d", arr[i][j]);
}
putchar('\n');
}
}
int **subsets(int A)
{
int **arr = malloc(sizeof (int *) * (1 << A));
int i;
for(i = 0; i < 1 << A; i++)
{
arr[i] = malloc(sizeof (int) * A); // Can be smaller
int *ptr = arr[i];
int j;
for(j = 0; j < A; j++)
{
if(i & (1 << j))
{
*ptr++ = j + 1;
}
}
*ptr = 0;
}
return arr;
}
的返回值等内容。别忘了添加它们。