结构体地址
题目1: 若有以下定义和语句:struct student
{
int age ;
int num;
};
struct student stu={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
两个题目都是用指向结构体的指针,去指向结构体成员的地址,那么如何使用呢?对这块了解的不多,书上说的太简单了
有没有大神,对这块知识点科普下,顺便解释下题二为什么
题一:
p=&stu.age
stu.age是int型,那么取地址之后,也是int*
而p是struct student *类型不同是不能直接=,要么强制转换(struct student *)&stu.age
题二:
如果你看了题一,你会发现C好像是最合适的{:10_256:} 第一题,p是结构体的指针,只能指向结构体的对象,而不能指向结构体内部成员变量,D选项&stu.age是int类型的地址,只能赋值给int类型的指针,而不能赋值给student类型的指针。
第二题,C选项有强制类型转换,直接价格data.n的地址转成了结构体sk的地址,然后赋值给了p。这和p=&data是一样的,因为data的地址就是data.n的地址,只是类型不同而已。强制类型转换就能完成。
页:
[1]