为何K&R认为指针作为函数参数比数组更可取?
为何K&R认为指针作为函数参数比数组更可取?
咱们先从K&R第99页的这段内容说起,先把前提搞清楚:
作为函数定义中的形参,
char s[];
和char *s;
是等价的;我们更倾向于后者,因为它更明确地表明这个变量是一个指针。
很多刚学C的朋友会纳闷:既然俩写法本质等价,为啥非得揪着指针写法不放?其实核心就俩字——「实在」。
你想啊,C语言里函数参数的数组声明其实是个“幌子”:不管你写char s[]还是char s[100],编译器都会悄悄把它转成char *s来处理,数组名到这儿直接就退化成指针了。但如果用数组的写法,新手很容易被误导踩坑:比如有人会傻乎乎写sizeof(s)想拿整个数组的大小,结果拿到的却是指针的字节数;还有人会误以为这个参数能像普通数组那样直接修改长度或者做专属操作,结果碰一鼻子灰。
但写char *s就不一样了,它明明白白把底儿露出来:“这玩意儿就是个指针,指向一段字符内存,不是啥带固定大小的数组”。不管是你自己隔仨月回头读代码,还是别的程序员接手,一眼就能get到参数的本质,不会被表面的数组写法迷惑。
这也贴合K&R一直推崇的C语言风格:不搞花里胡哨的语法糖,让代码贴近实际运行的逻辑,诚实、直接,能少踩不少没必要的坑。
备注:内容来源于stack exchange,提问作者Roee Zamir
相关产品推荐
相关产品推荐

