1

我想将两个数组的笛卡尔积保存到一个多维数组中。

arr[number][0]- 来自第一个数组的
arr[number][1]数字 - 来自第二个数组的数字

数 = sizeof(array1)*sizeof(array2)

int main() {
    int arr1[4] = {1, 4, 2, 3};
    int arr2[4] = {4, 1, 3, 3};
    int **outcomes = getProduct(arr1, 4, arr2, 4);

    int i;
    for(i = 0; i < 16; i++)
        printf("%d", outcomes[i][0]);

    getchar();
}

int* getProduct(int arr1[], int size1, int arr2[], int size2) {
    int **outcomes = (int *)malloc(sizeof(int)*16), count = 0, i, j;

    for(i = 0; i < size1; i++) {
        for(j = 0; j < size2; j++) {
            outcomes[count][0] = arr1[i];
            outcomes[count][1] = arr2[j];
            count++;
        }
    }
    return outcomes;
};

但是,这段代码在 getProduct() 函数内的嵌套循环中出现了奇怪的中断。逻辑没问题,我认为问题可能出在指针上。

  1. 为什么我需要用两个指针初始化多维数组?
  2. 为什么这段代码不起作用?
  3. 你对我如何改进这段代码有什么建议吗?(我没有用 C 编写太多代码,所以我不知道“好”代码使用哪种结构)。
4

1 回答 1

1

该函数getProduct将失败,因为您将指向 int(ie int*) 的指针分配给指向 int 指针 (ie int**) 的指针。

Why do I need to initialize multidimentional arrays with two pointers? 

因为

int**(指向 int 指针的指针) - 有了这个,我们可以访问任何行和任何列的元素,这是使用单个指针(或一维数组)不可能实现的

类似地int***可用于三维数组或换句话说指向 int 指针的指针

   To improve the code

我认为你的笛卡尔积函数应该是这样的

int** getProduct(int arr1[], int size1, int arr2[], int size2) {
    int **outcome = malloc(sizeof(int*)*size1);        
    int i,j;
    for(i = 0;i<size1;i++)
     outcome[i] = malloc(sizeof(int)*size2);
    for(i = 0; i < size1; i++) {
        for(j = 0; j < size2; j++) {
            outcome[i][j] = arr1[i] * arr2[j];
        }
    }
    return outcome;
}

你的 main() 像这样

int main() {
    int arr1[4] = {1, 4, 2, 3};
    int arr2[4] = {4, 1, 3, 3};
    int **outcomes = getProduct(arr1, 4, arr2, 4);

    int i,j;
    for(i = 0; i < 4; i++){
     for(j = 0;j <4; j++){
        printf("%d  ", outcomes[i][j]);
     }
     printf("\n");
    }
    getchar();
}
于 2013-01-19T12:15:21.740 回答