C语言中函数参数传递的问题
今天在学习C语言文件操作的时候发现了一个问题,就是函数读取文件的时候形参的问题
char *fgets( char *buf, int n, FILE *fp );
因为我们需要输出的是一个字符串,所以返回的自然就是char类型的指针了,也等同于char数组,因为C语言中的字符串底层的本质上也就是一个char类型的数组,同时数组的数据结构也是顺序的占用内存地址,所以也可以说是指针。这次让我烦恼的就是形参的问题了,由于主要是学习JAVA,C语言几乎忘得差不多了。如上所示的这个函数形参,在初学语言的时候,都是以为形参要什么类型,我们就给它什么类型,确实也可以这么说,但是很多时候却不是这样的。
上面函数的第一个参数是需要传递一个char类型的指针,实际上也就是char类型的数组,因为C语言不像Java一样是可以直接传递数组的,C语言在传递char类型的数组的时候,实际上在传递过程中就已经把char类型的数组退化为了char类型的指针,所以C语言的形参才变成了指针。
这个其实跟JAVA的继承有所相似,毕竟面向对象里所有的子类都会继承一个祖宗类Object,父接口可以引用子接口,指针即地址,地位就好比面向对象中的类(引用类型),如果理解了面向对象,这里的问题就迎刃而解了!