gpt4 book ai didi

c - 如何将数组作为参数传递给C中的函数?

转载 作者:行者123 更新时间:2023-11-30 18:41:53 25 4
gpt4 key购买 nike

我在 C 中有以下数组:

int format[6][6] = { {1,1,1,1,1,1},
{2,2,2,2,2,2},
{3,3,3,3,3,3},
{4,4,4,4,4,4},
{5,5,5,5,5,5},
{6,6,6,6,6,6}
}

然后我有一个函数需要将数组format传递给该函数,并将所有数据复制到一个新数组:

void constructNewArray(int array[6][6])
{
int newArray[10][10] = {0};
memcpy(newArray, array, sizeof(int)*6*6);
}

那么,constructNewArray函数的参数,int array[6][6]是否适合作为参数?或者如何纠正?

最佳答案

正如所写,函数中的代码是“OK”;函数定义没问题。如abelenky指出,调用代码中的数组初始值设定项缺少分号。

编译器基本上忽略了数组的前导维度。如果您有 C99 编译器,您可以编写:

void constructNewArray(int array[static 6][6])

这告诉编译器它可以假设数组中至少有 6 行。我不确定这何时真正能带来好处,但设施就在那里。

不太清楚的是数据是否按照您想要的方式复制到 10x10 数组。实际上,您最终会得到初始化的数组,就像您编写的那样:

int newArray[10][10] =
{ { 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, },
{ 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, },
{ 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, },
{ 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, },
// ... all zeroes from here onwards
};

此外,如果您尝试将 10x6 或 2x6 矩阵传递给函数,编译器不会提示。

就目前情况而言,您的函数会仔细创建数组并对其进行初始化,然后不对它执行任何操作。您无法返回本地数组(指向)。您必须为此进行动态内存分配,或者将新数组作为参数传递给函数,在这种情况下,它将变为“从 6x6 数组初始化 10x10 数组”。或者您可以安排从 constructNewArray() 函数内部使用构造的数组调用另一个函数,但这对于名为“construct”的函数来说是难以置信的。因此,尚不清楚您的函数是否设计正确。

关于c - 如何将数组作为参数传递给C中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19568854/

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