繁体   English   中英

为什么我们不能从一维数组中访问二维数组? 我如何访问?

[英]why can't we access 2D array as of 1D array? How can i access?

为什么我们不能从一维数组中访问二维数组? 如何访问?

数组函数:

int **combination(int no)
{

int i,j,c=0;
static int arr[100][2];

for(i=0;i<=no;i++){
    for(j=0;j<=no;j++){
        if(((i+j)==no)){
            arr[c][0]=i;
            arr[c][1]=j;
            c++;
            }
    }
}

return arr;
}

主功能:

int main() {
    int n,k,i;
    int **arr;
    int size=10;//let us assume.

    scanf("%d %d", &n, &k);
    fprintf(stderr, "1\n");
    arr=combination(n);
    fprintf(stderr, "2\n");

    for(i=0;i<size;i++){
    printf("%d-%d",arr[i][0],arr[i][1]);
}
    return 0;
}

它显示:

.c:29:8: warning: return from incompatible pointer type [-Wincompatible-pointer-types] return arr

和分段错误核心转储。

您能否建议调用以访问该二维数组中的元素的指针类型是什么?

那是因为int arr[100][2]指向 int [2] 数组的指针)与int**指向int**的指针的指针)不兼容。

为什么?

C11 标准 - 6.3.2.1 其他操作数 - 左值、数组和函数指示符 (p3)

数组指针转换

(p3) 除非它是sizeof运算符、 _Alignof运算符或一元'&'运算符的操作数,或者是用于初始化数组的字符串文字,否则类型为类型数组”的表达式将转换为类型为“指向类型的指针”的表达式,它指向数组对象的初始元素,而不是左值。

将 6.3.2.1(p3) 应用于int arr[100][2] ,结果是int (*arr)[2]指向 int [2] 数组的指针),而不是int** 所以你的编译器正确地生成了警告。

如果你真的想这样做,那么在main()中将你的arr声明更改为:

    int (*arr)[2];

然后将您的函数声明更改为:

int (*(combination)(int no))[2]

(一个函数采用(int no)返回int (*...)[2]一个指向int [2] 数组的指针

您还应该将函数中c的值限制为小于100以防止超出数组边界。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM