【问题标题】:C: How a two-dimensional array works? [closed]C:二维数组是如何工作的? [关闭]
【发布时间】:2017-02-02 05:20:21
【问题描述】:

对于二维数组,

char days[8][10] = { "", "Monday", "Tuesday",
                         "Wednesday", "Thursday", "Friday",
                         "Saturday", "Sunday" };

数组的模型在这里:


(来源:songjinshan.com

在主函数中使用时为:

printf("%s\n",days[1]);

产生Monday,而:

printf("%s\n",days[1][2]);

产生错误。我真的不明白它是如何工作的。

【问题讨论】:

  • days[1][2]n (char)
  • 显示产生错误的代码。
  • 你在main函数中是如何使用它的?
  • printf("%s", days[1][2]) 我现在明白我应该使用 %c 而不是 %s。

标签: c arrays multidimensional-array


【解决方案1】:

一般来说,对于像这样的数组

  char days[8][10]

days 是一个包含 8 个元素的数组,每个元素是一个包含 10 个 chars 的数组。

换个说法,

  • days是二维数组,
  • days[m] 是每个一维数组
  • days[m][n] 将是一维数组中的单个元素。

现在,问题来了,

main() 函数中使用时...

嗯,最好的猜测是,如更新后的代码所示,您将它 (days[1]) 用作 printf() 系列函数中的 %s 的参数。

在这种情况下,%s 需要一个指向以 null 结尾的 char 数组的指针,而 days[1](衰减到)指向数组 "Monday" 的第一个元素的指针。所以这是正确的。

另一方面,对于%s 格式说明符,days[1][2] 是一个不匹配的参数,因为它会生成一个char,而不是预期的char *。要打印days[1][2],您需要使用%c 格式说明符。

【讨论】:

  • 很棒的答案!正是我想要的。
【解决方案2】:

C/C++/Java/C# 中的数组是从零开始的索引,在这里您已经创建了 2D 数组或字符表,当您编写 days[1] 时,您正在访问的第一行是 1D(维)字符数组,称为字符串,当您编写 days[ 1 ] [ 2 ] 时,您正在访问第 2 行第 3 列的 字符(请记住 C 中的数组是从零开始的索引)。

让我在这里对您的图片进行编辑以解释这个概念。

代码用法

现在如果你想打印 character 你应该写类似的东西,

printf("%c\n", days[1][2]);//You are accessing the character in 2nd row (index 1) and 3rd column (index 2) here

要打印你应该写的字符串,

printf("%s\n", days[1]);//You are accessing the 2nd string (array of characters) OR 2nd row in 2D array which is at index 1 (remember '0' based index)

【讨论】:

    【解决方案3】:

    你试过了吗,

    printf("%c\n", days[1][2]);
    

    使用%cprintf 函数指定要打印的字符。

    使用%s 打印字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 2021-10-24
      • 2017-03-22
      • 2018-07-24
      • 1970-01-01
      相关资源
      最近更新 更多