指向结构体的指针(已解决)
指向结构体的指针
struct stu{
int num;
char name[20];
}student[3]={{1,"yqiong"},{2,"song"},{3,"li"}},*p;
main()
{p=(struct stu*) student[0].name;
p=p+1; /*执行p+1时,p的值增加了结构体的长度,这是书上的一句原话,
这句话什么意思呀?看不懂*/
printf("%s\n",p);
printf("%d",sizeof(struct stu)); /*输出为22*/
printf("%d",sizeof(*p)); /*这行也输出为22呀!*/
}
[此贴子已经被作者于2007-11-6 12:08:12编辑过]
----------------解决方案--------------------------------------------------------
p=p+n使指针的值相对于当前的位置增加了n*L,L代表p指向的类型的长度
----------------解决方案--------------------------------------------------------
以下是引用静思在2007-11-5 12:27:30的发言:
p=p+n使指针的值相对于当前的位置增加了n*L,L代表p指向的类型的长度
这只说明了p指针指向发生了变化,而不表明结构体长度增加了呀
----------------解决方案--------------------------------------------------------
“p的值增加了结构体的长度”这句话的意思
是经过p=p+1这个赋值后,指针变量的增量大小是结构体的长度,而不是由于p值改变而增加了结构体的长度
[此贴子已经被作者于2007-11-5 12:37:49编辑过]
----------------解决方案--------------------------------------------------------
谢谢受益匪浅
----------------解决方案--------------------------------------------------------
指针的移动是按照它指向的数据类型来算的.
----------------解决方案--------------------------------------------------------
struct stu{
int num;
char name[20];
}student[3]={{1,"yqiong"},{2,"song"},{3,"li"}},*p;
p=(struct stu*) student[0].name;
执行了这个语句后,结构体中的成员有哪些呀?
----------------解决方案--------------------------------------------------------
结构体的初始化就是对应的给它的成员初始化.
一个对一个,没有的以空对齐.
----------------解决方案--------------------------------------------------------
struct stu{
int num;
char name[20];
}student[3]={{1,"yqiong"},{2,"song"},{3,"li"}},*p;
main()
{p=(struct stu*) student[0].name;
p=p+1;
printf("\n%d\n",p->num); /*输出的是28531,这什么意思呀?*/
printf("%d\n",sizeof(*p));
}
----------------解决方案--------------------------------------------------------
你不看看你指针指向的是什么.
p=(struct stu*) student[0].name;//这句也错了,错的很严重
明显是错误的引用p->num
----------------解决方案--------------------------------------------------------