gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:20:18 26 4
gpt4 key购买 nike

为什么当我想将二维数组输入到函数时会出现此错误(图 1)?

enter image description here

#include <stdio.h>
#include <stdlib.h>
void pr(int** a){
printf("%d", a[0][0]);
}

int main(){
int a[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}};
pr(a);
}

最佳答案

核心问题是数组和指针不一样(尽管它们密切相关),二维数组不是指针数组。

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

#include <stdio.h>

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

三个 block 是一样的。如果有选择,我会使用 pr1() 中的技术,在接口(interface)中使用 VLA(可变长度数组)。如果您必须坚持使用 int ** 参数,则必须坚持使用数组 a 或类似的东西。当然还有其他方法可以创建它。例如:

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

关于c - 将 int[5][5] 传递给 int 类型参数的不兼容指针类型**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41647445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com