学习笔记中的内容多少会有一点文不对题,因为C语言中数组无法作为函数的一个传递参数。而数组名在作为函数传递参数使用的时候实际上也被转换成了一个指针。
编写如下代码;
#include""
char hello[] ="hello";
int main(void)
{
printf("%s\n",hello);
printf("%s\n",&hello[0]);
return 0;
}
编译运行结果:
E:\WorkSpace\02_技术实践\01_编程语言\01_C语言\01_C语言陷阱与缺陷\exp03>gcc
E:\WorkSpace\02_技术实践\01_编程语言\01_C语言\01_C语言陷阱与缺陷\exp03>a
hello
hello
从上面的结果可以看出,其实,在函数的参数中使用数组名与使用指向数组第一个元素的指针是同一个效果。
尽管两者在使用技术上有着同质性,但是为了避免不同的形式会给别人产生错误的引导,非数组类的声明尽量以指针的方式进行比较好。倘若一个指针指向的内存并不是一个数组,那么采用数组名的声明方式或许就会给人产生错误的引导。类似的,如果指向的是一个数组区域,则会给人以更加丰富的信息。例如:
int main(int argc,char* argv[])
{
/* code here */
}
与
int main(int argc,char** argv)
{
/* code here */
}
两种方式完全等价,但是前面一种能够更清晰地让人看出:这个参数是指向某个元素起始地址的指针,而后面的这种方式则不能够直观地看出这种含义。
以上,是数组或者指针用于函数参数传递时候需要注意的一点地方。主要的参考信息来自于对书籍《C语言陷阱与缺陷》,的确是值得好好阅读一下。