鱼C论坛

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

[已解决]结构体地址

[复制链接]
发表于 2020-3-21 13:47:34 | 显示全部楼层 |阅读模式
10鱼币
题目1: 若有以下定义和语句:
struct student 
{
        int age ;
        int num;
};
struct student stu[3]={1001,20,1002,19,1003,21};
main ()
{
        struct student *p;
        p=stu;
        ....
}
则以下不正确的引用形式是__D__
A (p++)->num    B P++    C (*p).num   D p=&stu.age


题目二:设有如下定义:
struct sk
{
        int n ;
        float x;
}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好像是最合适的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 13:47:35 | 显示全部楼层    本楼为最佳答案   
题一:
p=&stu.age
stu.age是int型,那么取地址之后,也是int*
而p是  struct student *  类型不同是不能直接=,要么强制转换(struct student *)&stu.age
题二:
如果你看了题一,你会发现C好像是最合适的
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 20:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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