1,p取”flower"地址,打印为后置++,先打印,再++,为f
1.s为3行10列的数组,p指向第一行flower首地址,因为++在后面所以先输出f
2.第一问输出后,(p)++,p=f,f的ASCII值为102,加1为103表示的字符为g
3.这里的p->x表示p所指向的结构体变量中的x成员,由p=stu+1知p表示数组stu的60,&dt[2]的结构体变量,指向x为60再进行++,即为61
4.p->y指的是&dt[2]=30
前言
首先 p指向的flower 所有 *p = "flower" ,数组的本质是一条链表,这个时候 'f','l','o' 等字符充当其元素,所以p本质是一个字符链表
一个链表里的地址跟其他链表是没有关系的,接下来无论你怎么操作(除了p=s[2]重新赋值),p指针所调试的范围就在"flower",不会改变到其他字符去
s可以理解为链表p的链表,它的元素是 tree flower air 它的位置调动只能在这三个元素之间
题1.1 : 已知 p 指向 "flower" 的头部,也就是 'f', (*p)++ : 是先引用p指向的元素并将其值+1,因为++在printf后面,所以是先输出再将其值(内码)+1
所以操作完之后,p还是指向原来字符的头部,只不过这个时候的 'f' 加上了1 变成了g
这时 控制台输出 'f' , p 还是指向原先"flower"的头部,只不过这个时候 "flower"已经变成了 "glower"
题1.2 : 已知 p ,这个时候指向的值为'g' *p++ 是先引用p指向的元素,再将p指向字符串的下一个元素'l'
这时 控制台输出 'g' 之后 p 指向原先字符串第二位也就是'l' ,原先字符串不变仍为"glower"
前言 p = stu+1 等价 p = &stu[0+1]; 这时p的元素为{60,30}
题2.1 : ++(p->x) 先将 (p->x)的值+1再引用
这时控制台输出 60+1 = 61, p 的元素变为{61,30},指针还在原来位置并未偏移
题2.2 : 输出p->y 的值为30