关于指针的,编制程序解决5个学生不同课程数的输出,看补充吧,谢谢:

来源:百度知道 编辑:UC知道 时间:2024/07/12 12:45:43
5个学生,每人课程数是不同的,成绩存放在一维数组中,以-1表示结束,
我把书上的程序输入TC,老不对,是我的程序写错了,还是TC不行,请帮我在C++里试一下,谢谢:
#include <stdio.h>
void main()
{int str1[]={78,98,73,-1},str2[]={100,98,-1},str3[]={88,-1},str4[]={100,78,33,65,-1},str5[]={99,88,-1};
int *grad[]={str1,str2,str3,str4,str5},**p=grad,i;
for(i=1;i<=5;i++) {
{printf("student %d:",i);
while(**p>=0)
{printf("%4d",**p);
(*p)++;
}
p++;
printf("\n");
}
}
谢谢,但是这段代码在TC老是不能编译通过,还是哪里错了,请指教,谢谢!
为什么不能编译通过啦?
可是我加上 了*p = grad[i]; 还是不行啦,谢谢你,能说明白点吗?

#include <stdio.h>
int main()
{int str1[]={78,98,73,-1},str2[]={100,98,-1},str3[]={88,-1},str4[]={100,78,33,65,-1},str5[]={99,88,-1};
int *grad[]={str1,str2,str3,str4,str5},**p=grad,i;
for(i=0;i<5;i++)
{
printf("student %d:",i);
*p = grad[i];
while(**p>=0)
{
printf("%4d",**p);
(*p)++;
}

printf("\n");
}
getch();
return 0;
}
你以为P指向了grad就能通过++的方法访问它的所有元素,所不幸的是这是不可以的,
grad是指针数组,里面放的分别是四个数组的首地址,而这四个数组之间,并不是连续的,你可以打印&str1[3]跟&str2[0]来看看它们两个的地址是否连续,
所以你 只用(*p)++是错误的。这样只能访问到第一个数组,
因此用加上 *p = grad[i];

====================================================
你这段当然不行,你没看我的解释吗?