C语言习题:打印M字符与结构体引用

需积分: 24 13 下载量 107 浏览量 更新于2024-07-13 收藏 282KB PPT 举报
在C语言习题中,我们遇到两个主要的话题:字符数组的访问与结构体指针的使用。 1. 字符数组访问: 题目要求找到能打印出字母M的语句。在这个结构体定义`struct person`中,每个成员`name`是一个字符数组。选项① `printf(“%c”, c[3].name);`试图打印`c`数组中第四个元素(索引从0开始)的名字,但直接打印整个名字可能不会输出"M",因为`name`通常是全名,而不是单个字符。选项② `printf(“%c”, c[3].name[1]);`打印的是`name`的第二个字符,由于`c[3]`代表"Mary",所以这会打印"M"。选项③ `printf(“%c”, c[2].name[1]);` 和④ `printf(“%c”, c[2].name[0]);` 分别尝试打印`Paul`和`Mary`的第二个字符,前者为'l',后者为'y',均不会得到"M"。 2. 结构体指针: 在第二个问题中,`struct sk`包含成员`a`和`b`,`data`是这个结构体的实例,而`*p = &data`将`p`指向`data`的地址。① `(*p).data.a`试图通过指针间接访问`data`的`a`成员,但实际上应该去掉`.`,因为`*p`已经指向了结构体,所以应该是`(*p).a`。选项②是正确的引用。③ `p->data.a`也是正确的语法,通过箭头操作符`->`访问结构体成员。④ `p.data.a`是错误的,因为没有使用解引用运算符`*`,`p`本身不是一个结构体变量。 总结起来,这两道题目考察了C语言中基本的数据结构和指针操作,特别是如何正确地访问数组元素和结构体成员。理解字符数组的索引和指针的使用是解答此类问题的关键。对于第一个问题,选项②是打印"M"的正确语句;对于第二个问题,正确的引用方式是选项②或③。同时,理解指针和结构体的关联对于高级编程至关重要。