在C中的函数中修改3维数组

问题描述 投票:0回答:1

我在 main() 函数中声明了一个 3D 数组:

char currentPositions[5][6][2];
我想使用另一个函数修改这个数组:
SetDefaultPositions(currentPositions);
这个函数看起来像这样:

void setDefaultPositions(char positions[5][6][2]){
    char defaultPositions[5][6][2] = {
        {"()", "()", "..", "..", "..", ".."},
        {"/\\", "/\\", "/\\", "/\\", "/\\", "/\\"},
        {"..", "..", "..", "..", "..", ".."},
        {"/\\", "/\\", "/\\", "/\\", "/\\", "/\\"},
        {"..", "..", "..", "..", "..", ".."}
    };
    positions = defaultPositions;
}

我尝试使用指针,但它一直告诉我这样的事情: 应为“char (**)[2]”,但参数的类型为“char (*)[6][2]” 警告:从不兼容的指针类型传递“setDefaultPositions”的参数 1 [-Win兼容指针类型] 或者没有错误,但打印 currentPositions 显示它是空的。 我什么都不明白,我也尝试了网上的一些解决方案,但我找不到有类似问题的人。 这是学校项目,不允许我使用全局变量。

arrays c pointers 3d
1个回答
0
投票

您无法将数组传递给 C 函数。它衰减为指针。
你可以这样做:

#include <stdio.h>
#include <stdlib.h>

void setDefaultPositions(size_t size, char positions[][6][2]){
    char defaultPositions[5][6][2] = {
        {"()", "()", "..", "..", "..", ".."},
        {"/\\", "/\\", "/\\", "/\\", "/\\", "/\\"},
        {"..", "..", "..", "..", "..", ".."},
        {"/\\", "/\\", "/\\", "/\\", "/\\", "/\\"},
        {"..", "..", "..", "..", "..", ".."}
    };
    memcpy(positions, defaultPositions, size);
}

int main()
{
    char arr[5][6][2];
    setDefaultPositions(sizeof arr, arr);
    for(int j = 0; j < 5; j++) {
        for(int i = 0; i < 6; i++) {
            printf("%.2s ", arr[j][i]);
        }
        printf("\n");
    }
}

程序输出:

() () .. .. .. .. 
/\ /\ /\ /\ /\ /\ 
.. .. .. .. .. .. 
/\ /\ /\ /\ /\ /\ 
.. .. .. .. .. .. 

请记住,数组元素不是字符串 - 它们没有终止符。

© www.soinside.com 2019 - 2024. All rights reserved.