C语言,struct Student s[40],*p=s,这时,结构体数组指针p指向了首元素的地址,(1)p++指向哪里?
(2)(++p)->age是谁?
(3)(p++)->age是谁?
哦,那p++相当于指向s[1],那要是想指向第0行的某个成员呢?p应该怎样表示?是p->s[0].name?
追答p指向name就可以了,p开始就已经表现了指向s的首地址s[0]了,所以直接取里面成员就可以了
但在实际应用中是要先声明对象,通过对象.成员来取某个值
追问还有个疑问哈(2)(++p)->age是指针先向下移动一行,再取里边成员age的值,即比如是20,是么?
(3)(p++)->age是先取第0行的年龄20,再使年龄增1,就是21?
嗯,没错,就是这样子
追问但书上说的好像不一样诶
挺晕的
追答哪里不一样?
p++指向age,按书上那么做是对的,假如s[0]的age的值为10,s[1]的age值为20,那么第一次输出的时候就是10,第二次直接输出*p就是20了,因为第一次是先运算,即先输出p指向首地址age的值10,其后p地址自增,然后再输出*p的时候就是s[1]的age值了20
上面说的是p++ ->age
开始是我理解错了,第三问。
追问对,(p++)->age是先取p->age,10,指针p再自增,指向s[1]
(++p)->age是p先自增,指向s[1],之后再取成员s[1].age 20
追答就是这个意思,应用到实际中,第一次是先输出s[0]的age10,第二次就会输出s[1]的age20,因为第一次输出后p改变指向到s[1]了
没错,就是这样子理解的
这次绝对没错了,抱歉,刚刚是我的失误
追问谢谢
追答主要是现在很少用c了,我学c#去了,c和c++的没怎么用,有点忘了
本回答被提问者采纳