在调用函数中接收2d指针数组

时间:2016-05-29 11:29:29

标签: c data-structures

我正在尝试在调用函数中接收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(列)值不同。

1 个答案:

答案 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; } 的返回值等内容。别忘了添加它们。