关于结构体,共同体,以及链表等内容的一些分析题。

初学结构体与链表这章,通过一些浅显的预习,稍微做了试验任务中的三道题,这里做一下笔记。

1.可以通过(*p).成员名 引用p指向的变量的成员。

2.用指向指针结构体变量的指针引用结构体变量的成员。格式:指向结构体变量的指针->成员名。

3.可以通过p->成员名,直接访问成员

4."."和"->"的优先级相同,都位于最高优先级

5.共同体的内存是其占用内存最大的成员的内存,结构体的内存是每一个成员所占用的内存之和。

以后再补充

这里把题目和自己的分析记录以下,以便后续复习。

1.分析代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 struct data{
     int n;
     float score;
 };
 void main(){
     struct data a[3]={1001,87,1002,72,1003,90},*p=a;
     printf("%d
",(p++)->n);
     printf("%d
",(p++)->n);
     printf("%d
",p->n++);
     printf("%d
",(*p).n++);
 } 

分析:

主函数之前定义一个名为data的结构体数组,其成员分别为n和score.在主函数中,向结构体中的成员赋值,n的值分别是1001,1002,1003.score的值分别为87,72,90.p为指针变量,定义时指向a的首地址.第一个printf语句,p++的值为p+1之前的数值,也就是仍然指向a的首地址,也就是a[1]中所对应的n值,即1001;第二个printf语句,p的值已经加1,输出的是a[2]中所对应的值,也就是1002;第三个printf语句,p的值为相对于第二个printf语句已经加1,此时p->n对应的是a[3]中的n值,也就是1003,p->n++的数值是p->n这个数值自加之前的数值,依旧是1003.第四个printf语句和第三个同理,输出结果为1004。

因此输出结果为1001,1002,1003,1004.

2.分析代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node{
     char *s;
     struct node *q; 
 }; 
 int main()
 {
     struct node a[]={{"clinton",a+1},{"bush",a+2},{"obama",a}};
     struct node *p=a;
     printf("%s
",p->s);
     printf("%s
",p->q->s);
     printf("%s
",p->q->q->s);
     return 0;
 }

 分析:

主函数之前定义了一个名为Node的结构体数组,其成员包括字符型指针s已经指向结构体Node的指针q.主函数第一句对node赋值。第一个printf语句中p指向a[0]中的成员s,也就是clinton.第二个printf语句中,p指向a[0]中的q,也就是指向a+1即a[1],接着再指向s即对应的是a[1]中的s的字符也就是bush.第三个printf语句中p指向q,也就是指向a[1],q又指向了q,也就是指向了a[1]中的q即a+2,然后又指向了s也就是指向了a[2]中s的字符也就是obama.因此最后的输出结果为 Clinton,bush,  Obama.

3.分析代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

 int main(){
 typedef union {long i;int k[5];char c;}DATE;
 struct data {int cat; DATE cow; double dog;};
 printf("%d
",sizeof(struct data));
 }

分析:

将一个共同体函数定义为类型DATE,分析这个共同体函数,long i;占八个字节,Int k[5],占5X4也就是20个字节, char c,占一个字节,这个共同体类型所占内存就是其最大成员所占的字节,也就是20.

对于下面的结构体分析,结构体的内存是每一个成员所占内存的.int cat,4个字节,DATE cow 类型为DATE,占据20个字节.double dog 8个字节,因此总共占据4+20+8=32个字节,故输出结果为32.

语言稚嫩,理解肤浅,望见谅。

人生如逆旅,我亦是行人
原文地址:https://www.cnblogs.com/sz2003/p/14091597.html