结构体指针数组的一些问题希望详解

先列一个代码方便说明:typedefstruct{charname[10];intscroe[3];}Student;intmain(){Student*students... 先列一个代码方便说明:
typedef struct{
char name[10];
int scroe[3];
}Student;
int main ()
{
Student *students[10];
scanf("%s",&students[0]->name);
return 0;
}
这样写是没有任何问题的我试了一下,用printf也可以输出,但是如果我把students[0]改成students[1]的话就会有问题,我想知道这是为什么?如果我需要给这10个指针都赋具体的值该怎么操作了?
还有一点没明白的是我用scanf可以给students[0]里面的成员变量赋值,但是如果我直接用=就不能赋,要用strcpy ,大概看了一下,理解的不够透彻,为什么用scanf就可以往里面写东西,直接=就不能写了?
students是一个数组,这个数组里面的每一个成员都是 Student*类型,也就是里面都是存的Student这种类型的指针,那么这个指针是没有指向一个确定的Student类型的变量的,直接往里面写入name跟score的具体值就不行了是吧?是不是需要malloc一个内存区域之后才能往里面写入具体值了?那为什么是students[0]的时候就可以写入了,又回到第一个问题了。
我现在的困惑大概就是这样,脑子里也很乱,非常感谢回答我的人,谢谢!
展开
 我来答
kaixingui2012
推荐于2016-04-07 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6481万
展开全部
Student *students[10];

这时students[0] 到students[9] 这10个元素都是Student*类型的指针,但这10个指针变量都没有指定具体的内存空间,所以,都是野指针,不能通过它们引用结构体成员!scanf("%s",&students[0]->name); 这里能运行,只能是你的运气好。

int i;
for( i=0;i<10;i++ )
{
students[i]=(Student *)malloc(sizeof(Student) ); //先分配空间,再使用!
scanf("%s",students[i]->name);

}
for( i=0;i<10;i++ )
{
printf("%s\n",students[i]->name);

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式