回答
有在这种情况下没有区别。但是,您应该更喜欢char *var;
。
这是因为*
与变量名称更密切相关,并且不是基本类型的一部分。例如,如果你这样做:
char* a, b;
你有什么是a
,指针-TO-char
和b
,一个char
。这很混乱!由于*
性格更接近char
关键字,我们预计类型的两个变量的将是指针,TO-char
,但*
实际上是相关仅与a
。 (这类似于char a[10], b;
如在评论中指出由teppic;所述[10]
说明符同样仅与a
相关联,并且因此只有a
将是一个数组。)
正确声明将是:
char *a, *b;
把*
符靠近可变意味着它很容易地看到发生了什么事情,当你打算一个变量是指针,而另一个不是:
char *a, b;
在这种情况下,显然b
并不是一个指针。在原始示例(char* a, b;
)中,我们不知道编程器是否打算将b
作为指针。从道格拉斯克罗克福德借来的,我们所知道的只是程序员无能。
有些人喜欢之前和之后把一个空间*
:
char * a, * b;
这猎物落在上面说明了同样的问题:如果b
不是指针,则声明(char * a, b;
)也可能导致关于程序员的意图的不确定性。因此,我建议不要在*
和变量名称之间放置空格。
任何你看它的方式,char* var;
应该被视为不好的风格。根据语言规范,它在语法上是正确的,但会导致无法读取的代码,因为它出现以指示*
说明符是同一声明中所有变量共享的类型的一部分,如果不是。 (类似于在同一行上编写一个复杂的函数 - 它可行,但这不是一个好主意。有些情况下,可读性和可维护性取代了个人风格偏好,这就是其中之一。)
就个人而言,我更愿意把一个空间后*
仅与函数的返回值打交道时:
char * foo();
这是明确的:那就是返回一个指针的函数 - 至 - char
。
char *foo();
难道程序员意味着返回一个指针-TO-char
,还是他的意思是创建一个指向返回char
功能的功能?该语言将解决此问题与其他原型相同,但我们的目标是可读性,而这意味着完全传达我们对人类的意义,而不仅仅是编译器。
比较[]定义一个数组的关联也是有用的,而()定义一个函数。虽然这些遵循标识符,但与使用*定义指针的原理相同。 – teppic 2013-03-04 22:16:15
@teppic好点,那些说明符也表现相同的方式。当您考虑这些时,'*'的行为会更有意义。 – cdhowie 2013-03-04 22:17:01
我也喜欢'char * var'风格,因为在我看来它使'*'的语义更加一致。 'char * var'意味着'var'指向的* dereferenced *值的类型是'char',这是真的。 'char * var'看起来像将反引用运算符放在变量名“char”的错误一侧,这根本没有任何意义。 – 2013-03-04 22:19:16
没有什么区别,只是喜好的事情,你自己说的
- 1. C - “char var []”和“char * var”之间的区别?
- 2. 什么是$ {VAR}和{$ VAR}
- 3. 如何在ASC上对var char time列进行排序?
- 4. CFDataCreateWithBytesNoCopy()不会与“const char var [xx]”一起工作,但会与malloc?
- 5. char!=(signed char),char!=(unsigned char)
- 6. strtok和int vs char char C
- 7. isset($ var)vs @ $ var
- 8. Javascript set var var
- 9. Perl%{$ var} vs%$ var
- 10. char * t = new char和char * t = new char [10]有什么不同?
- 11. 这是什么jQuery代码做 - 函数($)和VAR = VAR => VAR =>
- 12. unix DECLARE_WAIT_QUEUE_HEAD(var)var prototype?
- 13. $ this-> var或$ var
- 14. [[-n $ VAR] VS [[-n $ {VAR: - }]
- 15. Array&Session - var和$ var之间的差异
- 16. {$ var}和$ var之间有什么区别?
- 17. qmake变量,$$ VAR和$$的差值{VAR}
- 18. var now = new Date();和var now = Date();
- 19. var vs * var的gdb/x命令var
- 20. “var&= expr”的行为不像“var = var && expr”
- 21. @implementation,VAR和ARC
- 22. = “{{VAR}} ”和AngularJS
- 23. Java为什么char = char^char与char^= char不同?
- 24. char **转为char *
- 25. C++ char const char *
- 26. char [1024] vs char *
- 27. char str []和char * str有什么区别?
- 28. SQL Server char(1)和char(2)列
- 29. C++我不明白const char *和char *
- 30. char * s和char * s有什么区别?
它们是等效的声明。 – ouah 2013-03-04 22:13:22
http://stackoverflow.com/questions/398395/in-c-why-is-the-asterisk-before-the-variable-name-rather-than-after-the-type http://stackoverflow.com/问题/ 3770187 /差异-int-i-and-int-i – cnicutar 2013-03-04 22:13:39
它只是一个优先选择的问题,char * x通常被使用 – 2013-03-04 22:14:45