C 中语句的解释混乱

问题描述 投票:0回答:1

我正在努力提高我的 C 编程技能,并且遇到了与指针声明相关的令人困惑的方面。我希望更好地理解这两种说法之间的差异:

int *ptr[3]; int (*ptr)[3];

虽然乍一看它们可能很相似,但我相信它们的含义和含义存在显着差异。如果您能帮助我理解,我将不胜感激:

  1. 这两种声明的根本区别
  2. 考虑到它们的语法相似性,如何区分它们
  3. C 中指导这些语句解释的规则或约定

我对这两者感到困惑。我认为我缺乏一些与解释这些声明相关的概念。请尝试解释一下我哪里有不足或者我应该多学习哪些部分?我可能错过了哪些概念?

arrays c pointers multidimensional-array semantics
1个回答
0
投票

这些说法根本不同,让我解释一下原因。

int *ptr[3]
声明一个数组,其中包含 3 个指向
int
类型变量的指针。发生这种情况是因为,正如 Gerhardh 在他们的评论中解释的那样,
[]
运算符的优先级高于
*
。 当然,括号在运算符优先级中起着重要作用。通过输入
int (*ptr)[3]
,顺序将被反转,并且您将声明一个指针,该指针指向包含 3 个
int
的整个数组。我希望这对你有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.