等效c声明[英] Equivalent C declarations

本文是小编为大家收集整理的关于等效c声明的处理方法,想解了等效c声明的问题怎么解决?等效c声明问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

int (*x)[10];

int x[10];

等效?

根据"顺时针螺旋" 规则,他们将其解析为不同的C声明.

sclickweary:

大卫的``顺时针/螺旋规则'' 安德森

有一种称为 ````顺时针/螺旋规则'' 使任何C程序员都可以解析 他们的头任何c声明!

有三个简单的步骤可供遵循:

   1. Starting with the unknown element, move in a spiral/clockwise direction; 
          when ecountering the following elements replace them with the 
          corresponding english statements:

      [X] or []
          => Array X size of... or Array undefined size of... 
      (type1, type2)
          => function passing type1 and type2 returning... 
      *
          => pointer(s) to... 

   2. Keep doing this in a spiral/clockwise direction until all tokens have been covered.

   3. Always resolve anything in parenthesis first! 

推荐答案

它们不等.在第一种情况下,x是一个指向10个整数数组的指针,在第二种情况下,x是10个整数的数组.

两种类型是不同的.在两种情况下,您可以通过检查sizeof来看到它们不是同一件事.

其他推荐答案

关注这个简单的过程

从变量名开始(或 最内向的结构如果没有标识符 存在.不跳不起 在正确的括号上;说你什么 看.再次向左看而不跳跃 在括号上;说出你看到的. 跳出一级括号 任何.向右看;说出你看到的. 看左边;说出你看到的.继续 以这种方式,直到你说 可变类型或返回类型.

SO:

int (*x)[10];

x是一个指向10 int s

的阵列的指针
int x[10];

x是10 int s

的数组
int *x[10];

x是10个指针到int s

的数组

其他推荐答案

我倾向于遵循理解C声明的优先规则,该规则在书中非常好专家c编程 - 深C秘密 peter van der linden

A - Declarations are read by starting with the name and then reading in 
precedence order.

B - The precedence, from high to low, is:
        B.1 parentheses grouping together parts of a declaration
        B.2 the postfix operators:
        parentheses () indicating a function, and
        square brackets [] indicating an array.
        B.3 the prefix operator: the asterisk denoting "pointer to".

C If a const and/or volatile keyword is next to a type specifier (e.g. int, 
        long, etc.) it applies to the type specifier. 
        Otherwise the const and/or volatile keyword 
        applies to the pointer asterisk on its immediate left.

本文地址:https://www.itbaoku.cn/post/359105.html