【问题标题】:Effect of placement of deference operator vs whitespace in C [duplicate]在C中放置尊重运算符与空格的影响[重复]
【发布时间】:2011-01-05 03:11:31
【问题描述】:

【问题讨论】:

标签: c pointers


【解决方案1】:

就C编译器而言,没有区别。

【讨论】:

    【解决方案2】:

    没有区别。

    int* a;
    int *b;
    int * c;
    

    a、b 或 c 之间也没有区别。他们都是指针。只是你可以放任意数量的空格。

    然而,这两者是有区别的:

    int* a, a1, a2;
    int *b, b1, b2;
    int *c, *c1, *c2;
    

    您仅在 C 行声明了 3 个指向整数的指针。 A 和 B 都有一个指向 int 的指针和两个 int。

    【讨论】:

      【解决方案3】:

      这一切都没有区别。请注意,以下所有声明都是相同的:

      • char*getInput();
      • char* getInput();
      • char *getInput();
      • char * getInput();
      • char* getInput ();
      • char *getInput ();
      • char * getInput ();
      • char* getInput ( );
      • char *getInput ( );
      • char * getInput ( );
      • char* getInput ( ) ;
      • char *getInput ( ) ;
      • char * getInput ( ) ;

      所有这些都让编译器知道有一个名为 getInput 的函数返回一个 char * 并传递一个特定但未指定的特定但未指定类型的参数数量。


      编辑

      源文件中的空格字符大多被忽略和冗余。

      for (n = 0; n < 1000; n++) { /* ... */ }
      for(n=0;n<1000;n++){/*...*/}
      

      仅在字符串内部以及需要分隔无法通过其他方式分隔的标记时才重要。

      return 9; /* statement that returns from a function */
      return9;  /* statement that evaluates a variable */
      

      【讨论】:

        【解决方案4】:

        空间的位置。

        【讨论】:

          【解决方案5】:

          对于编译器来说,没有区别。

          在我看来,第一种形式是首选,因为它更清楚地表明该函数返回一个指向字符的指针(而不是字符)。当然,恕我直言。

          【讨论】:

            【解决方案6】:

            从语义和句法的角度来看没有。

            【讨论】:

            • 从句法的角度来看也没有。
            【解决方案7】:

            在含义上完全没有区别。事实上,甚至在语法方面也没有。只要空格在某处,就没有问题。两者都编译成完全相同的代码。

            使用哪个通常是一个偏好问题。传统的 C 编码人员通常更喜欢第二种,因为它更能表明类型仍然是char,不管它是一个指针。正如我相信 Bjarne Stroustrup 本人所指出的那样,许多 C++ 编码人员更喜欢 char* 语法,因为它被认为更多地属于 OOP 风格。我个人也更喜欢这个,因为它表示该变量是一个 char 指针

            编辑:找不到他实际写的地方,但你可以在他的 BC++ Style and Technique FAQ 指南中清楚地看到他更喜欢 char* 样式语法。

            【讨论】:

            • 但是当你声明一个char数组时,你不会写char[N] a;,对吗?变量的“指针性”是声明符的一部分:很高兴* 可以写成看起来像是类型说明符的一部分,但它并不能准确地反映声明语法。跨度>
            【解决方案8】:

            你的意思是 char (*getInput)(); 如果没有括号,您将拥有一个返回指向 char 的指针的函数。带括号的 getInput 是指向返回 char 的函数的指针。

            【讨论】:

              【解决方案9】:

              我知道我正在回答所有人所说的话...只是想添加更多内容:

              你可能想问的可能是: 字符* getInput(); char (*getInput)();

              这里第一个表示:getInput 是一个返回指向字符的指针的函数。 第二个是:getInput 是一个指向返回字符的函数的指针。

              如果声明复杂,请记住!!!从括号内开始阅读

              考虑一下:char* (*getInput)(); 这里,getInput 是一个指向函数的指针,该函数返回一个 char 的指针。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-07-05
                • 2011-09-01
                • 1970-01-01
                • 2012-09-23
                • 2015-04-04
                • 2011-03-12
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多