当前位置:  开发笔记 > 编程语言 > 正文

不兼容的指针类型将int [5] [5]传递给int类型的参数**

如何解决《不兼容的指针类型将int[5][5]传递给int类型的参数**》经验,为你挑选了1个好方法。



1> Jonathan Lef..:

核心问题是数组和指针不一样(尽管它们密切相关),而2D数组不是指针数组.

此代码显示了解决问题的三种方法.数组a0是您重命名和重新格式化的数组; 数组a是一个指针数组,每个指针都是一个指向5数组的指针,int通过'复合文字',这是一个添加到C99的功能.我已经升级了打印功能,以打印传递给它的所有25个元素元素 - 并创建了两个具有不同接口的新打印功能,这些接口也打印传递给它们的整个数组.我假设阵列是方形的; 的矩形(非方形)矩阵可容易地处理,尤其是通过在一个变体pr1()pr2(int n, int m, int a[n][m])-这几乎是相同的pr1(),但需要一个单一的调整内部测试j针对m代替n.

#include 

static void pr0(int a[][5]);
static void pr1(int n, int a[n][n]);

static void pr(int **a)
{
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
            printf("%3d", a[i][j]);
        putchar('\n');
    }
    putchar('\n');
}

int main(void)
{
    int a0[5][5] =
    {
        {  1,  4,  7, 11, 15 },
        {  2,  5,  8, 12, 19 },
        {  3,  6,  9, 16, 22 },
        { 10, 13, 14, 17, 24 },
        { 18, 21, 23, 26, 30 },
    };
    int *a[] =
    {
        (int[]){  1,  4,  7, 11, 15 },
        (int[]){  2,  5,  8, 12, 19 },
        (int[]){  3,  6,  9, 16, 22 },
        (int[]){ 10, 13, 14, 17, 24 },
        (int[]){ 18, 21, 23, 26, 30 },
    };

    pr(a);
    pr0(a0);
    pr1(5, a0);

    return 0;
}

static void pr0(int a[][5])
{
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
            printf("%3d", a[i][j]);
        putchar('\n');
    }
    putchar('\n');
}

static void pr1(int n, int a[n][n])
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            printf("%3d", a[i][j]);
        putchar('\n');
    }
    putchar('\n');
}

样本输出非常均匀:

  1  4  7 11 15
  2  5  8 12 19
  3  6  9 16 22
 10 13 14 17 24
 18 21 23 26 30

  1  4  7 11 15
  2  5  8 12 19
  3  6  9 16 22
 10 13 14 17 24
 18 21 23 26 30

  1  4  7 11 15
  2  5  8 12 19
  3  6  9 16 22
 10 13 14 17 24
 18 21 23 26 30

这三个街区是一样的.给定一个选择,我将使用该技术pr1(),在界面中使用VLA(可变长度数组).如果你必须坚持int **参数,你必须坚持使用数组a或类似的东西.当然还有其他方法来创造它.例如:

int *a[] = { a0[0], a0[1], a0[2], a0[3], a0[4] };

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有