我在 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 显示它是空的。 我什么都不明白,我也尝试了网上的一些解决方案,但我找不到有类似问题的人。 这是学校项目,不允许我使用全局变量。
您无法将数组传递给 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");
}
}
程序输出:
() () .. .. .. ..
/\ /\ /\ /\ /\ /\
.. .. .. .. .. ..
/\ /\ /\ /\ /\ /\
.. .. .. .. .. ..
请记住,数组元素不是字符串 - 它们没有终止符。