首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C中访问2D数组中的元素

在C中访问2D数组中的元素
EN

Stack Overflow用户
提问于 2022-04-03 17:21:43
回答 1查看 189关注 0票数 0

我正在编写一个程序,它将一个2D char数组传递到一个用于打印的函数中。但是,当我试图访问2D数组中的元素以进行打印时,我不能这样做,只有当数组被传递时,我才会在main()函数中放置打印循环和语句时,就不会出现这个问题。

有人能帮忙解释一下吗?

代码语言:javascript
运行
复制
void disp_array(char* array)
{
    for (int i = 0; i < SIZE; i++)
    {
        for (int j = 0; j < SIZE; j++)
        {
            printf("%c", array[i][j]);
        }
        printf("\n");
    }
}

附加的是我的代码:j语句中的printf突出显示了一个错误:

E0142:“表达式必须具有指针到对象类型,但它具有int类型”

EN

Stack Overflow用户

发布于 2022-04-03 17:24:24

函数声明是错误的。

由于参数具有char *类型,所以表达式array[i]生成一个char类型的标量对象,该对象由于整数提升而被提升为int类型,因此在尝试执行array[i][j]时可能不会应用下标运算符。所以编译器发出错误消息。

E0142:“表达式必须具有指针到对象的类型,但它具有int类型。”

函数应该声明如下

代码语言:javascript
运行
复制
void disp_array(char array[][SIZE], int n )
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < SIZE; j++)
        {
            printf("%c", array[i][j]);
        }
        printf("\n");
    }
}

或者像这样

代码语言:javascript
运行
复制
void disp_array(char (*array)[SIZE], int n )
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < SIZE; j++)
        {
            printf("%c", array[i][j]);
        }
        printf("\n");
    }
}

具有数组类型char[SIZE][SIZE]的参数由编译器隐式地调整为char ( * )[SIZE]类型。也就是说,函数不知道存在多少char ( * )[SIZE]类型的元素。因此,您需要显式地指定元素的数量。总是尝试定义一个更通用的函数。

除了数组之外,还需要传递数组中的行数。例如

代码语言:javascript
运行
复制
disp_array( array, SIZE );

如果数组包含字符串,则函数定义将类似于

代码语言:javascript
运行
复制
void disp_array(char (*array)[SIZE], int n )
{
    for (int i = 0; i < n; i++)
    {
        puts( array[i] );
    }
}
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71728263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档