我了解数组如何衰减为指针。据我了解,对于编译器来说:
void foo(int *arg1);
100% 等价于:
void foo(int arg1[]);
是否应该优先选择一种风格?我想要保持一致,但我很难证明这两个决定的合理性。
虽然int main(int argc, char *argv[])
and int main(int argc, char **argv)
是相同的,前者似乎更常见(如果我错了,请纠正我)。
我会推荐against使用[]
函数参数的语法。
赞成使用的一个论点[]
是它以一种自记录的方式暗示指针应该指向多个事物。例如:
void swap(int *x, int *y)
double average(int vals[], int n)
但那为什么是char *
总是用于字符串而不是char []
?我宁愿保持一致并始终使用*
.
有些人喜欢const
他们可以做的一切,包括按值传递参数。使用时的语法[]
(仅在 C99 中可用)不太直观,也可能不太知名:
const char *const *const words
vs. const char *const words[const]
虽然我确实认为最终const
无论如何,都太过分了。
此外,数组的方式decay并不完全直观。特别是,它是not递归应用 http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr#pass2dary (char words[][]
不起作用)。尤其是当你开始使用更多间接的方式时,[]
语法只会造成混乱。 IMO 最好始终使用指针语法,而不是假装将数组作为参数传递。
更多信息:http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr#aryptrparam http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr#aryptrparam.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)