我想将两个数组的笛卡尔积保存为一个多维数组。
arr[number][0]
- 来自第一个数组的数字
arr[number][1]
- 第二个数组中的数字
number = 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()函数内的嵌套循环中扼杀了。逻辑是可以的,我的问题可能是指针。
答案 0 :(得分:1)
函数getProduct
将失败,因为您将指向int(即int*
)的指针指向指向int指针的指针(即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;
}
你的主要()就像这样
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();
}