程序中有些问题:
1、函数的定义有错误(参数格式不对);
2、程序中没有调用函数(或者说是调用格式有误)
3、函数中的处理逻辑需要修改(一步一步来,这样容易处理和理解)。
你定义的函数是使用数组作为参数的,数组名本身就是个地址(相当于指针)。
下面在手机上用易历知食软件里的微C程序设计来演示修正后的代码并运行程序,供参考。
手机上修正后的代码如下图:
手机上运行的效果如下图所示:
如果int * p声明指针p,那么p是一个指向int型变量的指针:
1、直接用p=a;存在类型不匹配;
2、*(p+i)+j是一个int型变量,不是一个地址,故而不能用*取其值;
如果用int (*p)[4]声明指针,那么p是一个指针数组;可以用*p也是一个地址,那么*(p+i)+j还是一个地址,自然可以用*取其值;
当然,如果你不想用指针数据,你可以如下改造程序:
#include<stdio.h>void main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}
int * p,i,j
p=(int*)a // 强制类型转换
scanf("%d,%d",&i,&j)
printf("%d",*(p+i*4+j))
return
}
一、你的 float score 数组定义的是:一个3行、4列的二维浮点数组,数组的元素为浮点数。如果你换个格式书写就清晰了!float score[3][4]={{65,67,70,60,},{80,87,90,81,},{90,99,100,98}}
在调用的过程中,score 就是这个数组的首地址,指向的是浮点数组{65,67,70,60,}。score + 1 指向的是数组{80,87,90,81,}。
二、你的 float *p 定义的是:一个指向浮点数的指针。这个是一维的。
在调用的过程中,float 指向的是 xx。一个浮点数字。
两个的定义不同,所以参数传递过程中会出错。
三、你的 float (*p)[4] 定义的是:一个指向含有四个元素的浮点数组的指针。
在调用的过程中,float 指向的是{xxx,xx,xx,xx,},由四个浮点数组成的数组。
这时两个定义相同,所以参数传递过程中没有错误。
四、有个建议,你的程序书写格式不清晰,不利于你纠错和修改,应该尽量的清晰、明确,不建议使用简化方式定义参数。
作为一个软件工作者,应该尽量使程序流畅、格式清晰、易读,这是一个软件工作者最基本的职业素养。
格式化后,程序如下,会清晰很多:
#include<stdio.h>
void main()
{
void search (float (*p)[4],int n)/*这里的 float *p 好像有问题*/
float score[3][4]={{65,67,70,60,},{80,87,90,81,},{90,99,100,98}}
search(score,2)
}
void search(float (*p)[4],int n)/*这里的 float *p 好像有问题*/
{
int i
printf("the score of No.%d are:\n",n)
for(i=0i<4i++)
{
printf("%5.2f",*(*(p+n)+i))
}
printf("\n")
}