|
30鱼币
/*有四个学生,每个学生有四科的成绩,该程序功能是找出有不及格成绩的学生*/
#include <stdio.h>
void main()
{
double score[][4] = {{60.0, 70.0, 80.5, 90.5}, {56.0, 89.0, 67.0, 88.0}, {34.2, 78.5, 90.0, 68.5}, {66.0, 78.0, 88.0, 97.0}};
void search(double(*point)[4]); /*以指针变量做形参*/
search(score); /*调用查找函数*/
}
void search(double(*pointer)[4])
{
int i, j;
double *pt;
pt = *pointer; /*i是学生号,从0到3*/
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++) /*j是每个学生每科成绩,从0到3*/
{
if(*(*(pt + i) + j) < 60)
{
printf("the failed score number is score[%d]\n", i);
printf("\n");
break;
}
}
}
}
编译过后在 printf("the failed score number is score[%d]\n", i); 出现illegal indirection;
如果将search 函数换成以下形式则不会,怎么回事?
void search(double(*pointer)[4])
{
int i, j;
double *pt;
pt = *pointer; /*i是学生号,从0到3*/
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++) /*j是每个学生每科成绩,从0到3*/
{
if(*(*(pt + i) + j) < 60)
{
printf("the failed score number is score[%d]\n", i);
printf("\n");
break;
}
}
}
} |
最佳答案
查看完整内容
ps 对于指针 楼主记住这句经典的话 可以加深对指针的理解 无论二级三级指针 还是n级指针 都遵循这个规律
指针的类型 决定了指针的视野 指针的视野决定了指针的步长
int* p, p是一个一级指针, 每次加1或减1, 移动的是一个int大小的步长,
int** pp, pp是一个二级指针, 每次加1移动的是一个数组(int*)的大小, *pp自然也就是一个一级指针, 每次移动一个int大小, 距离例子 我如果要取第5行第10个元素, 就是*(*(pp+4)+9)
|