关于指针:在C中放置deference运算符与空格的效果

Effect of placement of deference operator vs whitespace in C

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicates:
what is the difference between “int i” and “int i”?
what is the difference between const int*, const int * const, int const *

两者有什么区别

1
char* getInput();

1
char *getInput();


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


没有区别。

1
2
3
int* a;
int *b;
int * c;

A、B和C之间也没有区别。它们都是指针。只要你想放多少空间就放多少。

但是,这两者之间存在差异:

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

只有在C行上声明了指向int的3个指针。A和B都有一个指向int的指针和两个int。


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

  • 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 *,并传递一个特定但未指定的、特定但未指定类型的参数数量。

编辑

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

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

它只在字符串内部以及需要分离不能用其他方法分离的令牌时才重要。

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

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

对于我的大脑来说,第一种形式是首选的,因为它表明函数返回一个指向char(而不是char)的指针更清晰。当然,这完全是我的错。


空间的位置。


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

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

编辑:找不到他实际写的地方,但是你可以在他的BC++风格和技术常见问题指南中很清楚地看到他更喜欢char*风格的语法。


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


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


我知道我在回答所有人所说的……只是想增加一些东西:

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

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

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

请考虑:char*(*getinput)();这里,getinput是指向返回char指针的函数的指针。