【问题标题】:Trying passing as a paramater two dimesional array In C尝试在C中作为参数传递二维数组
【发布时间】:2013-09-20 17:25:51
【问题描述】:

当我试图在 C 中将二维数组作为参数传递时,

void PrintTriangle(int *triangle)

这对我不起作用,为什么?

【问题讨论】:

  • 你怎么称呼printTriangle?发布您的代码/sn-p 可能有助于我们回答这个问题。
  • 什么不起作用?请提供详细信息:您如何传入数组、您在 printTriangle 中尝试执行的操作以及失败的原因。
  • @hacks int pascalTriangle[5][5];帕斯卡三角[0][0] = 1; PrintTriangle(pascalTriangle);

标签: c


【解决方案1】:

传递多维数组作为参数时必须指定最外层数组的维度

类似这样的:-

void PrintTriangle(int pascalTriangle[][5]);

像这样调用PrintTriangle(pascalTriangle); 是错误的,因为您的函数PrintTriangle() 需要一个指向整数的指针。

【讨论】:

  • 那么如何指定维度?
  • @hacks:- 错误的原因与您提到的非常相似。仍然在我的答案中更新了!!!谢谢!! :)
  • 也阅读了这个answer的cmets。
  • 最后一个维度是最里面的数组,而不是最外面的。在int a[2][3] 中,a[i] 是一个聚合对象,它是三个int 的数组。所以最后一维对应的数组在前一维数组里面。
【解决方案2】:

以下是我记忆传递多维数组作为参数的方法。这可能有点幼稚,但对我有用。
假设你定义了一个数组

int numbers[3][4];

并且您想将其传递给函数。
为了正确地做到这一点,我回答了一系列问题:
1)我想传递给函数什么?一个数组。(在本例中为 numbers)。
2) 什么是numbersNumbers是其第一个元素的地址(不赘述);
3)first element of numbers 是什么?(在这种情况下是array of 4 integers
4)所以我想要的函数形式参数是pointer to answer from step 3

int  (*pointer)[4]

这可能会很慢并且看起来不专业,但是您可以在您能想到的每个维度的数组上提出相同的问题。问问自己,当不传递整个数组而是传递子数组之一时,这也很有用。

希望它能帮助你,就像它帮助了我一样。

【讨论】:

  • 您可以像声明数组一样简单地声明参数:void foo(int numbers[3][4]);。编译器会自动调整为int (*numbers)[4]
  • @EricPostpischil 正如我所提到的,它既不快也不聪明,只是我自己学习多维数组时使用的东西。帮助我更好地理解任何大小的指针和数组。此外,它几乎不会为愚蠢的错误留下任何余地。
【解决方案3】:

调用你的函数为

 PrintTriangle(pascalTriangle); 

错了。因为PrintTriangle() 期望指向整数的指针 作为其参数,而pascalTriangle(衰减后)的类型为int(*)[5]。此外,您必须在数组pascalTriangle 中使用pass the number of rows and columns (as arguments)。这个函数的原型应该是

void PrintTriangle(int row, int col, int *triangle);

并且调用它可能是

PrintTriangle(5, 5, &pascalTriangle[0][0]); 

【讨论】:

  • @H2CO3;是的。我知道,你也知道这实际上意味着什么:)
  • 我只鼓励你使用正确的措辞,现在你这样做了:)
  • 不客气,当我纠正您所写内容中的一些小问题时,不要认为这是吹毛求疵。我经常对人们这样做只是为了使他们免于潜在的大规模投票:P,并且首先是为了学习。
  • C 不需要你传递二维数组的行数和列数,只需要传递列数。 (被调用的函数可能出于其他原因需要它。)
  • @EricPostpischil;阅读 cmets 至此answer
猜你喜欢
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 2021-10-17
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多