C语言中指针控制循环的问题

来源:百度知道 编辑:UC知道 时间:2024/06/02 20:53:22
最近在学数据结构,顺序表在c中的存储表示成一个结构体,譬如说
typedef struct student{
int number;
int *score;
char *name;
}student;
然后在很多操作中结束循环的条件就是结构体指针指向NULL;譬如说
student *stu1;
……
while(stu1)
{
……
stu1++;
}
……
这样操作好像是可以的。
我想问的是如果我定义一个指向结构体地址的指针,还可以用它来控制循环吗?
譬如说student **stu1
……
while(stu1)
{
……
stu1++;
}
怎么我试了几次都不行呢,最后stu1都不知道跳到那里去了,这种情况下stu1最后会指向NULL吗?希望能给我个详细点的解释哈,有个例子最好了。
我知道如果定义student *stu的话,那么stu->number,stu->name[],stu->score[]就可以表示表示一个学生的信息舍,我之所以想定义一个student **stu,是想这样的话那么是不是stu[0]->number,stu[1]->number……stu[i]->number(i=0,1,2……)就可以表示很多个学生的信息?一句话就是把指向结构体的指针的地址再存放在一个连续地址或者数组中,这样的为成绩排名之类的操作就可以通过移动指针来实现,更方便舍。但是定义student **stu的话,stu++最后就不知道移到那里去了,我不知道这样做对不对,或者说有没有更好的方法啊?另外二楼的师兄说的stu1=stu1->next是链表中的循环方法吧,如果顺序表也可以这样操作吗?谢谢大家啊

你如果想这样使用stu[0]->number
你要明白stu[0]的含义
它等价于 *(stu+0) 在这里看不出问题
但如果是stu[1]会怎样
它等价于*(stu+1)
而你想要的指向第1个节点的指针是这样的
*stu + 1
这是一个问题
还有一个问题就是最后如果你的*stu已经等于NULL了 ,那stu也不会等于NULL ,因为它存储的是另外一个指针的地址,如果另外一个指针为NULL了,它的地址也是不变的呀

如果你想用这个方法应该这么写
while(*stu1)
{
……
(*stu1)++;
}
不过这是没有必要的

我看到你用指针以为是链表呢
顺序其实指针用得很少
stu1=stu1->next是链表中的循环方法,如果顺序表是不可以这样操作的

指针是由一个一个的节点连接起来的
每个节点至少有2部分,1个存储数据,另一个就是指向下一个节点的指针.
第一个节点指向第二个,第二个节点在指向第三个,如此下去.
通常最后一个节点的指针域被设置为NULL来标志链表的结束.
while(stu1)
{
……
stu1 = stu1->next;//一般这么做
}
当到了最后一个节点时, stu1->next就是NULL
所以该操作就是把NULL赋给stu1,所以可以这样来检测循环结束

在student *stu1中,stu1是一级指针,指向节点的地址,在student **stu1中,stud1是二级指针,指向的是student型指针变量的地址.你可以这么理解指针:
student stu1;
student *stu;
student *class[N];
student **group;
假入某个班级的学生节点构成了一个线形表A,而多个班级构成了多个线形表,那么,stu指针能够指向A中的节点的地址;而group存储的