若有下列定义,则以下不合法的表达式是( )。 struct student{ int num; int age; }; struct student stu[3] = {{101, 20}, {102, 19}, {103, 20}}, *p = stu; a. (p++)->num b. p++ c. (*p).num d. p = &stu.age
时间: 2023-04-30 15:05:53 浏览: 607
a. 先取出p所指向的对象的num,然后p指向下一个对象,返回101。
b. p指向下一个对象,返回stu + 1。
c. 先取出p所指向的对象的num,返回101。
d. stu是一个数组名,不能取出他的属性。应该改为p = &stu[0].age。返回一个指向age的指针。
相关问题
若有下列定义,则以下不合法的表达式是( )。 struct student{ int num; int age; }; struct student stu[3] = {{101, 20}, {102, 19}, {103, 20}}, *p = stu;
### 回答1:
这段代码定义了一个结构体类型为student,包含两个成员变量:num和age。接着用这个结构体类型定义了一个stu数组,包含三个元素,分别初始化为{101, 20},{102, 19}和{103, 20}。最后定义了一个指向结构体类型为student的指针p,初始化为stu数组的首地址。
### 回答2:
在这个定义中,定义了一个名为student的结构体,其中包含了学生的编号num和年龄age。同时,定义了一个名为stu的结构体数组,包含了三个学生的信息,分别是编号101、年龄20,编号102、年龄19,编号103、年龄20。另外,还定义了一个名为p的指针,指向数组stu的第一个元素。因此,这个定义是合法的。
对于题目中给出的表达式,我们需要分析它的语法和语义,判断是否合法。
1. {101, 20, 102, 19, 103, 20}
这个表达式是将所有的学生信息直接放在了一个大括号中,没有按照结构体成员的方式进行排列。因此,这个表达式不符合定义中的结构体形式,是不合法的。
2. &stu[2]
这个表达式是取数组stu的第三个元素的地址,返回的是一个指向结构体类型的指针。虽然没有显式地提到学生的编号和年龄,但是在定义中已经规定了结构体的成员,因此这个表达式是合法的。
3. stu.age
这个表达式中使用了一个点运算符,在结构体类型中表示访问成员变量。但是,在这个表达式中缺少了结构体的成员名,无法访问指定的成员变量,因此这个表达式是不合法的。
4. *(p+1)->num
这个表达式从左到右的意思是:p+1表示指向数组stu的第二个元素的指针,*表示取出指针指向的结构体,这里就是第二个学生的结构体。->表示访问结构体的成员变量num,即第二个学生的编号。因此,这个表达式是合法的。
综上所述,不合法的表达式是{101, 20, 102, 19, 103, 20}和stu.age。
### 回答3:
在这个结构体定义和变量初始化的语句中,定义了一个名为student的结构体,该结构体包含两个整型变量:num和age。此外,还定义了一个名为stu的结构体数组,包含三个元素,每个元素都是一个student类型的结构体,并且给每个元素的num和age成员变量赋初值。还定义了一个名为p的指向student类型结构体的指针变量,并将stu数组的首地址赋给了它。
下列不合法的表达式是103.age,因为结构体中的成员变量不能直接访问,需要通过结构体变量或指向结构体的指针来访问,正确的表达式应该是(p+2)->age,意为访问stu数组中第三个元素的age成员变量。
有struct student{int age;int num;)stu1,*p;p=&syu1; 对结构变量stu1中成员age的正确引用是A.(*p).age B.p->age C.stu1.age D.student.age
根据给出的结构体声明语句 `struct student{int age; int num;} stu1, *p; p = &stu1;`,我们可以得知:
- `stu1` 是一个 `struct student` 类型的结构体变量。
- `p` 是一个指向 `struct student` 类型的结构体变量的指针,它指向变量 `stu1`。
因此,结构变量 `stu1` 中成员 `age` 的正确引用方式是选项 B. `p->age`。
选项 A. `(*p).age` 的引用方式也是正确的,表示通过指针 `p` 访问结构体变量 `stu1` 的成员 `age`。
选项 C. `stu1.age` 的引用方式也是正确的,表示直接访问结构体变量 `stu1` 的成员 `age`。
选项 D. `student.age` 的引用方式是错误的,因为 `student` 是结构体类型名,不是结构体变量名,应该改为 `struct student.age`。
综上所述,选项 B. `p->age` 是结构变量 `stu1` 中成员 `age` 的正确引用方式。
阅读全文