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()函数内的嵌套循环中会突然中断。逻辑是好的,我想问题可能是指针

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

  • 函数
    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**
    不是“数组数组数组”…请参见。