在C中放置deference算子与空格的效果

时间:2010-01-14 15:33:53

标签: c pointers

  

可能重复:
  what is the difference between “int i” and “int i”?
  what is the difference between const int*, const int * const, int const *

之间有什么区别
char* getInput();

char *getInput();

9 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:8)

没有区别。

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的指针。

答案 2 :(得分: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 */

答案 3 :(得分:2)

空间的位置。

答案 4 :(得分:2)

对于编译器,没有区别。

在我的大脑中,首选表单是首选,因为它表明函数更清楚地返回指向char(而不是char)的指针。当然,这严格来说是恕我直言。

答案 5 :(得分:1)

没有来自语义和句法观点。

答案 6 :(得分:1)

在意义上没有任何区别。事实上,即使在语法方面也没有。只要空白某处,就没有问题。两者都编译成完全相同的代码。

通常使用的是偏好问题。传统的C编码器通常更喜欢第二种,因为它更能说明类型仍然是char,而不管它是指针。我相信Bjarne Stroustrup自己指出,许多C ++程序员更喜欢char*语法,因为它在OOP风格中被认为更多。我个人也喜欢这个,因为它表示该变量是 char指针

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

答案 7 :(得分:0)

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

答案 8 :(得分:-1)

我知道我正在回答所有人说过的话......只是想补充一些东西:

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

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

如果复杂的声明总是记得!!!从支架内部开始阅读

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