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] 可以省略,但调试程序时却报错,这是为何? 展开
#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] 可以省略,但调试程序时却报错,这是为何? 展开
3个回答
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]个元素。
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]个元素。
展开全部
省掉〔4〕,*p虽然指向了数组score首地址,但这样的话,输出语句printf("%5.2f ",*(*(p+n)+i));无法指向数组的第二行,指针p是一普通地址变量,它只能进行简单的移位*(p+n),而不能实现*(*(p+n)+i)).这就是报错的原因。。。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个相当于是个的数组,是一个指针数组,把它当做一个二维数组来调试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询