鱼C论坛

 找回密码
 立即注册
查看: 1718|回复: 2

[已解决]结构体地址

[复制链接]
发表于 2020-3-21 13:47:34 | 显示全部楼层 |阅读模式
10鱼币
题目1: 若有以下定义和语句:
  1. struct student
  2. {
  3.         int age ;
  4.         int num;
  5. };
  6. struct student stu[3]={1001,20,1002,19,1003,21};
  7. main ()
  8. {
  9.         struct student *p;
  10.         p=stu;
  11.         ....
  12. }
复制代码

则以下不正确的引用形式是__D__
A (p++)->num    B P++    C (*p).num   D p=&stu.age


题目二:设有如下定义:
  1. struct sk
  2. {
  3.         int n ;
  4.         float x;
  5. }data,*p;
复制代码

若要使p指向data中的n域,则正确的赋值语句是__C___
A p=&data.n;   B *p=data.n;  C p=(struct sk *) & data .n;  D (struct sk *) data.n
两个题目都是用指向结构体的指针,去指向结构体成员的地址,那么如何使用呢?对这块了解的不多,书上说的太简单了
有没有大神,对这块知识点科普下,顺便解释下题二为什么
最佳答案
2020-3-21 13:47:35
题一:
p=&stu.age
stu.age是int型,那么取地址之后,也是int*
而p是  struct student *  类型不同是不能直接=,要么强制转换(struct student *)&stu.age
题二:
如果你看了题一,你会发现C好像是最合适的

最佳答案

查看完整内容

题一: p=&stu.age stu.age是int型,那么取地址之后,也是int* 而p是 struct student * 类型不同是不能直接=,要么强制转换(struct student *)&stu.age 题二: 如果你看了题一,你会发现C好像是最合适的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 13:47:35 | 显示全部楼层    本楼为最佳答案   
题一:
p=&stu.age
stu.age是int型,那么取地址之后,也是int*
而p是  struct student *  类型不同是不能直接=,要么强制转换(struct student *)&stu.age
题二:
如果你看了题一,你会发现C好像是最合适的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 14:39:17 | 显示全部楼层
第一题,p是结构体的指针,只能指向结构体的对象,而不能指向结构体内部成员变量,D选项&stu.age是int类型的地址,只能赋值给int类型的指针,而不能赋值给student类型的指针。
第二题,C选项有强制类型转换,直接价格data.n的地址转成了结构体sk的地址,然后赋值给了p。这和p=&data是一样的,因为data的地址就是data.n的地址,只是类型不同而已。强制类型转换就能完成。
3.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-13 14:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表