C语言二维数组传参与指针的问题?
定义了一个floatscore[][5]={{68,57,99,82,93},{69,71,52,86,57},{98,92,95,96,99},{86,75,86,84...
定义了一个float score[][5]={{68,57,99,82,93},{69,71,52,86,57},{98,92,95,96,99},{86,75,86,84,79}};存放4个学生的5门成绩,写一个函数求所有学生第一门成绩的平均分。定义函数float average(float *a),调用的时候用average(*score);我的理解是形参a现在指向的是score[0]的首地址,我需要score[0][0],score[1][0],score[2][0],score[3][0],那么&a将其转换为score二维数组的首地址(现在变为行指针),再用&a+i换行,最终的数据用*(*(&a+i)),请问错误出在哪里
展开
1个回答
展开全部
float *a这样声明函数形参,那样调用,a是score[0]的地址,但&a却不是score[0]那一行的行地址。因为a是函数的float *型局部变量,&a只是函数中存放a的地址,与score无关。这样声明虽然能做,但要计算下标,很麻烦,不提倡。最简单的写法是把函数形参声明成float (*a)[5],调用时实参写score,这样就可以在函数中按二维数组随意操作了。
(若帮助了你,请采纳)
(若帮助了你,请采纳)
追问
那也就是说我要是想用&将列指针变成行指针的话只能在实参上进行,不能在形参上进行是吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询