设z主函数中定义了数组str[][],实参为str,形参应该如何表示?
二维数组作为参数传递到函数有三种方式:1:直接传递2:指针传递,将二维数组的第一行传递3:利用二级指针进行传递
实参为str,str表示排长,表示一维数组的起始地址,所以形参也必须是一个基类型为指向一维数组的指针变量,因为形参和实参的基类型必须相同,形参为str[][5],实参传的是一个二维数组的第一行的起始地址,形参表示一个二维数组类型,就相当于实参是一维数组的首地址时,形参是一维数组,i匹配,可以传递。
实参为数组名str,与1同类型,形参表示为char (*str)【5】表示为一个指向char类型的,具有5个元素的数组的指针str,和实参类型相同,当参数传递以后,str就成为了指向那个二维数组的排长,str表示原数组的第一行数组,str【0】表示第0行第0列的元素地址,str【1】表示第1行第0列的元素地址,str【1】+1表示第1行第1列的元素地址。就是将二维数组的第一行传到形式参数中这样二维数组的数值都能表示了。
实参为p数组的首地址,形参为e类型为二级指针的参数str,str指向p数组的首地址,*(str+1)=str【1】,即为p【1】的值,即为原二维数组的第1行第0列的地址。这样传递相当于先建立一个一维数组存储二维数组每行首元素的行,列地址,然后传递这个一维数组。形参是char **和char * 的吗?肯定不是,因为char **str表示str是一个指向指针类型(char *)的指针,这样str才能指向char *类型的指针数组p。char *str表示str是一个指向char类型的指针。实参和形参的基类型不匹配所以不对。
(*(str+1))+1即str【1】+1表示的就是原函数第一行第一列的地址。
小知识:一维数组的传递中,实参为str,形参为str[],实参表示str的首元素的地址,形参表示为*str(str是个指针变量,指示的数值为实参str 的首地址)。