结构体指针数组的一些问题希望详解
先列一个代码方便说明: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]的时候就可以写入了,又回到第一个问题了。
我现在的困惑大概就是这样,脑子里也很乱,非常感谢回答我的人,谢谢! 展开
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]的时候就可以写入了,又回到第一个问题了。
我现在的困惑大概就是这样,脑子里也很乱,非常感谢回答我的人,谢谢! 展开
1个回答
展开全部
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);
}
这时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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询