|
发表于 2019-3-21 15:03:08
|
显示全部楼层
本楼为最佳答案
本帖最后由 sunrise085 于 2019-3-21 15:36 编辑
你的理解是对的。指针对结构体成员的引用有两种型式,一种是“.”,一种是“->”。这两种的区别就是前者的左边需要是实体,后者的左边需要是指针。那么指针怎么分为实体和指针呢?在使用指针的时候前面加*则成为实体,不加*则是指针,所以这道题的选项C和D都是第二种情况,是对的。然后看选项A和B,选项A中,*p放在了括号内,之后再引用其成员写法是对的,选项B错就错在运算符的优先级问题上了,应该是(*(p+i)).成员名,这样就和选项A一样了。
这个题目写一个简单想小程序就可以测试出来那个是错误选项了。
- #include <stdio.h>
- struct stu{
- char str;
- };
- int main(void) {
- stu *p,mystu[2];
- for(int i=0;i<2;i++){
- mystu[i].str='a'+i;
- }
- p=mystu;
- printf("str=%c\n",(*p).str);
- printf("str=%c\n",*(p+1).str);
- printf("str=%c\n",(p+1)->str);
- printf("str=%c\n",p->str);
- return 0;
- }
复制代码 |
|