C语言 分配二维阵列



我的目标是分配一个仅使用 1 行的 2D 数组以提高效率。因为我的教授希望它是有效的。代码给了我一个错误,说它无法从 void* 转换为 int。

#include<stdio.h>
#include<stdlib.h>
#define NUMOFCOL 4
int **addtwoarr(int (*A)[NUMOFCOL], int (*B)[NUMOFCOL]);
int main(void){
    int firstarr[4][4]={{1,1,1,1},
                        {1,1,1,1},
                        {1,1,1,1},
                        {1,1,1,1}},
        secondarr[4][4]={{1,1,1,1},
                        {1,1,1,1},
                        {1,1,1,1},
                        {1,1,1,1}}, **receiver;
    receiver = addtwoarr(firstarr, secondarr);
    printf("%d", receiver[3][3]);
}
int **addtwoarr(int (*A)[NUMOFCOL], int (*B)[NUMOFCOL]){
    int col, row, **arr;
    (*arr)[NUMOFCOL] = malloc(NUMOFCOL * sizeof(*arr)); /*this line in particular gives the error */
    for(row=0; row<NUMOFCOL; row++){
        for(col=0;col<NUMOFCOL; arr[row][col]=A[row][col]+B[row][col], col++){}
    }
    return arr;
}

分配发生在 addtwoarr 函数中,这是发生错误的地方。

我真的不建议这样做,因为您的代码中有很多关于高端大小的假设。但是如果你真的想这样做,在 C 中返回指向固定长度数组的指针的相当神秘的语法如下所示:

#include <stdio.h>
#include <stdlib.h>
#define NUMOFCOL 4
int (*addtwoarr(int A[][NUMOFCOL], int B[][NUMOFCOL]))[NUMOFCOL];
int main(void)
{
    int firstarr[][NUMOFCOL] = {
        {1,1,1,1},
        {1,1,1,1},
        {1,1,1,1},
        {1,1,1,1}},
    secondarr[][NUMOFCOL] = {
        {1,1,1,1},
        {1,1,1,1},
        {1,1,1,1},
        {1,1,1,1}};
    int (*receiver)[NUMOFCOL] =  addtwoarr(firstarr, secondarr);
    printf("%dn", receiver[3][3]);
    free(receiver);
}
int (*addtwoarr(int A[][NUMOFCOL], int B[][NUMOFCOL]))[NUMOFCOL]
{
    int col, row;
    int (*arr)[NUMOFCOL] = malloc(NUMOFCOL * sizeof(*arr));
    for(row=0; row<NUMOFCOL; row++){
        for(col=0;col<NUMOFCOL; arr[row][col]=A[row][col]+B[row][col], col++);
    }
    return arr;
}

输出

2

祝你好运。

相关内容

  • 没有找到相关文章

最新更新