【发布时间】:2015-02-01 19:51:01
【问题描述】:
我有一个巨大的二维数组,我试图将它传递给一个函数。这是数组:
int image[13][13] =
{
{ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72 },
{ 72, 72, 71, 70, 70, 70, 70, 70, 70, 70, 70, 72, 72 },
{ 72, 107, 116, 145, 137, 130, 154, 118, 165, 111, 173, 116, 72 },
{ 72, 126, 150, 178, 158, 175, 163, 169, 170, 160, 176, 163, 70 },
{ 72, 130, 192, 195, 197, 186, 129, 185, 196, 196, 193, 195, 70 },
{ 72, 126, 187, 166, 85, 75, 106, 185, 191, 191, 189, 188, 69 },
{ 72, 121, 183, 111, 100, 51, 137, 188, 187, 186, 184, 180, 69 },
{ 72, 117, 177, 143, 58, 77, 137, 180, 171, 183, 178, 173, 69 },
{ 72, 111, 172, 108, 101, 110, 115, 67, 49, 120, 175, 165, 68 },
{ 72, 107, 145, 105, 145, 120, 85, 51, 51, 56, 138, 157, 68 },
{ 72, 103, 147, 158, 155, 131, 115, 114, 114, 115, 121, 152, 68 },
{ 72, 79, 146, 161, 163, 165, 168, 167, 164, 162, 158, 114, 70 },
{ 72, 69, 53, 49, 49, 49, 49, 49, 49, 49, 50, 61, 72 }
};
我有这样声明的函数:
int max_2d(int p_valeurs[13][13]);
int max_2d(int p_valeurs[13][13])
{
int valeur_max;
for (int i = 0; i < 13; i++)
{
int max_local = max(p_valeurs[i], LARGEUR);
if (valeur_max < max_local)
{
valeur_max = max_local;
}
}
return valeur_max;
}
int max(int p_valeurs[]);
int max(int p_valeurs[], int p_taille)
{
int valeur_max;
for (int i = 0; i < p_taille; i++)
{
if (valeur_max > p_valeurs[i])
{
valeur_max = p_valeurs[i];
}
}
return valeur_max;
}
我的问题是当我在max_2d 函数中传递image 2d 数组时,该数组变成了一个int(*)[13]。我不明白发生了什么,出了什么问题。谁能帮帮我?
编辑
请记住,这是学生作品。我需要了解出了什么问题以及如何解决此问题。谢谢!
【问题讨论】:
-
你是按值传递的吗?哎呀。你真的需要阅读如何有效地使用参考资料。
-
"数组变成了一个 int(*)[13]"——是的,确实如此。这就是数组在 C 和 C++ 中的工作方式——在大多数情况下,它们会衰减为指针,例如。 G。当您将它们传递给函数时。
-
@tadman 你不能只是“将其重新转换为
int *”(即使使用int *p = &p_valeurs[0][0];),因为当迭代到达第二行时,这将违反严格的别名规则。 -
@TheParamagneticCroissant 那些正在谈论由于 C 中数组
arr[0]的越界访问而导致的未定义行为。(与严格的别名无关;而且还不清楚它是否是 UB C++)。但是,如果你写int *p = (int *)&arr;或int *p = (int *)arr,那么肯定不会有越界访问,因为p绑定到所有arr,而不仅仅是第一行。