各位大侠小弟是一个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的返回值是多少?,又返回到主函数的那个地方?*/
} 展开
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的返回值是多少?,又返回到主函数的那个地方?*/
} 展开
3个回答
展开全部
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)
{
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专家编程
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询