c语言中,指向一维数组的指针变量有什么用呢?

rt,如程序:#include<stdio.h>voidmain(){voidsearch(float(*p)[4],intn);floatscore[3][4]={{6... rt,如程序:
#include <stdio.h>
void main()
{
void search(float (*p)[4],int n);
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)
{int i;
printf("the score of No.%d are:\n",n);
for(i=0;i<4;i++)
printf("%5.2f ",*(*(p+n)+i));
}

中,指针变量(形参)p 传递的值为 score ,即 &score [0], 所以 *p 所指向 score[0], 即 &score [0][0] ,我是这样理解的,觉得 (*p)[4]中的 [4] 可以省略,但调试程序时却报错,这是为何?
展开
 我来答
匿名用户
2010-10-12
展开全部
int *p;
p是指向一个int类型的地址的指针,如果执行p+1那么它将移动一个int宽度的地址。

int (*p)[4];
p是指向一个有4个元素的int数组的指针(相当于一个二维指针),如果执行p+1,那么它将移动4个int宽度的地址。

*(*(p+n)+i)是把p当作一个二维指针进行解引用,它要访问的是score[n][i]元素,所以p+n移动了n个(4个int宽度)的地址,即移动到了第n行,*(p+n)取到了这一行的首地址,然后再加上i就移动到了这一行的第[i]个元素。
蓝莓math
2010-10-12 · TA获得超过519个赞
知道小有建树答主
回答量:466
采纳率:0%
帮助的人:239万
展开全部
省掉〔4〕,*p虽然指向了数组score首地址,但这样的话,输出语句printf("%5.2f ",*(*(p+n)+i));无法指向数组的第二行,指针p是一普通地址变量,它只能进行简单的移位*(p+n),而不能实现*(*(p+n)+i)).这就是报错的原因。。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
代码C的世界
2010-10-12 · 超过11用户采纳过TA的回答
知道答主
回答量:27
采纳率:0%
帮助的人:21.8万
展开全部
这个相当于是个的数组,是一个指针数组,把它当做一个二维数组来调试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式