【问题标题】:Pointers to Character Array指向字符数组的指针
【发布时间】:2021-06-22 18:29:14
【问题描述】:

所以我正在学习 C 并且对我正在学习的网站上的这个陈述感到有些困惑。

如果你有

char ch_arr[3][10] = {
                         "spike",
                         "tom",
                         "jerry"
                     };

它是这么说的。

ch_arr 是一个指向 10 个字符的数组或 int(*)[10] 的指针

但是int(*)[10]是什么意思,如果这是一个字符数组,为什么指针不是char类型?

提前致谢,如果问题不好,我很抱歉,我正在努力提高提问能力。

【问题讨论】:

  • 网站是什么?指向 10 个字符数组的指针的类型为 char(*)[10],而不是 int(*)[10]。可能是网站上的拼写错误。
  • 您好,我正在查看的网站和具体页面在这里overiq.com/c-programming-101/array-of-strings-in-c
  • "ch_arr 是一个指针" -->。不,ch_arr 是一个数组。 array 3 of array 10 of char。指针不是数组。数组不是指针。
  • 但是数组名不就是指向C语言第一个元素的指针吗?
  • @Sekken 不,它在大多数但不是所有上下文中都“转换”为指针。例如,sizeof ch_arr 产生数组对象的大小,而不是指针的大小。请参阅我之前评论中的链接。数组不是指针。

标签: c


【解决方案1】:

这是一个二维数组。每个字符串(例如“spike”)都是一个字符数组。这意味着它基本上是一个包含数组的数组。

char ch_arr[3][10] = {"spike", "tom", "jerry"};

然后可以将二维数组ch_arr转换为指针。在 C 和 C++ 数组到指针的转换applies to every array automatically on access 中,指针都指向第一个元素,在这种情况下为char[10] 类型。因此,指针的类型为 char(*)[10],正如 cmets 中所指出的 Keith Thoumpson。

关于你正在使用的网站...它包含一些错误,所以我会使用不同的来源。

【讨论】:

  • 你好,谢谢,我明白什么是二维数组但是 int(*)[10] 这个语法很混乱,你能用英文解释一下吗?谢谢
  • 数组/指针转换在访问时自动应用于每个数组。见C11 Standard - 6.3.2.1 Other Operands - Lvalues, arrays, and function designators(p3)。
  • cdecl 是一个有用的资源,无论是cdecl.org 还是应用程序。例如,declare foo as pointer to array 10 of char 为您提供char (*foo)[10]。去掉标识符得到类型名:char (*)[10],意思是“指向char的数组10的指针”。
  • 请记住,二维数组只不过是数组的数组。
  • @KeithThompson 这正是我写的:这意味着它基本上是一个包含数组的数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多