C-结构和清单
我想把两个数组的笛卡尔积保存成一个多维数组C-结构和清单,c,arrays,C,Arrays,我想把两个数组的笛卡尔积保存成一个多维数组 arr[number][0]-第一个数组中的编号 arr[number][1]-第二个数组中的编号 数字=sizeof(阵列1)*sizeof(阵列2) intmain(){ int arr1[4]={1,4,2,3}; int arr2[4]={4,1,3,3}; int**结果=getProduct(arr1,4,arr2,4); int i; 对于(i=0;i
arr[number][0]
-第一个数组中的编号arr[number][1]
-第二个数组中的编号
数字=sizeof(阵列1)*sizeof(阵列2)
intmain(){
int arr1[4]={1,4,2,3};
int arr2[4]={4,1,3,3};
int**结果=getProduct(arr1,4,arr2,4);
int i;
对于(i=0;i<16;i++)
printf(“%d”,结果[i][0]);
getchar();
}
int*getProduct(int arr1[],int size1,int arr2[],int size2){
int**结果=(int*)malloc(sizeof(int)*16),计数=0,i,j;
对于(i=0;i
但是,这段代码在getProduct()函数内的嵌套循环中会突然中断。逻辑是好的,我想问题可能是指针
函数
getProduct
将失败,因为您正在将指向int的指针(即int*
)分配给指向int指针(即int**
)的指针
因为
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();
}
int**getProduct(int-arr1[],int-size1,int-arr2[],int-size2){
int**outcome=malloc(sizeof(int*)*size1);
int i,j;
对于(i=0;i函数getProduct
将失败,因为您正在将指向int的指针(即int*
)分配给指向int指针的指针(即int**
)
因为
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();
}
int**getProduct(int-arr1[],int-size1,int-arr2[],int-size2){
int**outcome=malloc(sizeof(int*)*size1);
int i,j;
对于(i=0;它的代码甚至不应该编译。请确保您注意编译器生成的警告/错误消息。您至少可以帮我分配此DWodiIndicational数组的内存吗?:p此代码甚至不应该编译。请确保您注意编译器生成的警告/错误消息。您至少可以吗请帮助我为这个DWodiIndicational数组分配内存?:p什么是*ptr for?它从未被使用过。@khernik修改了答案,删除了不必要的*ptr。这对您来说应该很好。int**
不是一个“数组数组”…请参见,例如:“*ptr”的作用是什么?它从未被使用过。@khernik修改了答案,删除了不必要的*ptr。这对您来说应该很好。…int**
不是“数组数组数组”…请参见。