各位大侠小弟是一个C语言小菜鸟,今遇一道C语言小难题,还望各位大侠把刀相助啊? 10

#include<stdio.h>intmain(){floatscore[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}... #include<stdio.h>
int main()
{
float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
float *search(float(*pointer)[4],int n); /*指针变量P指向包含4个flaot型元素的一维数组*/
float *p;
int i,k;
printf("Please enter number of student:");
scanf("%d",&k);
printf("The score of NO.%d student are:\n",k );
p=search(score,k); /*score是数组名,k为要查询的学生的编号,他们两个均为实参*/
for(i=0;i<4;i++)
{
printf("%5.2f\t",*(p+i));
}
printf("\n");
system("pause");
return 0;
}
float *search(float(*pointer)[4],int n) /*定义pointer为指针变量且指向4个flaot型的一维数组*/
{
float *pt;
pt=(*pointer+n); /*问题在这里如果把pt=*(pointer+n),改成pt=(*pointer+n)以后为什么输出会发生变化啊?*/
return (pt); /*问Pt的返回值是多少?,又返回到主函数的那个地方?*/
}
展开
 我来答
lsj9192
2012-07-28 · TA获得超过103个赞
知道答主
回答量:89
采纳率:0%
帮助的人:40.6万
展开全部
float *search(float(*pointer)[4],int n) /*定义pointer为指针变量且指向4个flaot型的一维数组*/
{
float *pt;
pt=(*pointer+n); /*问题在这里如果把pt=*(pointer+n),改成pt=(*pointer+n)以后为什么输出会发生变化啊?*/
return (pt); /*问Pt的返回值是多少?,又返回到主函数的那个地方?*/
}
我帮你简单解释一下:
1)指针是有类型的,例如char*的指针,像你这里,指针的类型是一个数组;
2)*p+n,意思是:p指向的地址偏移n个字节;
3)*(p+n),意识是:在p指向的地址偏移n*sizeof(p的类型)
4)按照你的程序意思,应该是选择3)
追问
麻烦这位大侠再把*(pointer+n)和(*pointer+n)两者的区别再讲一下好吗?小弟还是不解啊~惭愧 啊
追答
我回答的是通用的说话。你那个是二维数组,相当指针的指针,比较复杂,咱们讨论简单的。
例如:
前提: int aa[10],int p*; p=aa;
这样的话:(p+5) == &aa[5],它们地址相等;
*(p+5)==aa[5],它们值相等;
由于间接运算符(*)的优先级高于+,因此*p+5相当于(*p)+5,即aa第一个元素的值和5相加;
而*(p+5)表示aa的第5个元素。

回答你的问题:
float(*pointer)[10],是一个指针数组,和上面类似,只是*p+5表示的是*p对应的地址值再加5,返回的是一个地址;*(p+5)返回的是第5个单元的地址;

呵呵,不是专业老师,讲不清啊!建议看看C primer plus和C专家编程
huawuqie001
2012-07-28
知道答主
回答量:32
采纳率:0%
帮助的人:14.9万
展开全部
pt=*(pointer+n) zhixiangdizhi
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaojiji939
2012-07-28
知道答主
回答量:16
采纳率:0%
帮助的人:5.1万
展开全部
太长了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式