zoukankan      html  css  js  c++  java
  • 关于结构体,共同体,以及链表等内容的一些分析题。

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

    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.

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

    人生如逆旅,我亦是行人
  • 相关阅读:
    【C++】链表回环检测
    【C++】满二叉树问题
    【C++】约瑟夫环(数组+链表)
    【C++】子序列匹配问题
    【OJ】抓牛问题
    【C++】基于邻接矩阵的图的深度优先遍历(DFS)和广度优先遍历(BFS)
    【C++】二叉树的构建、前序遍历、中序遍历
    范进中Nature——儒林外史新义
    VMware Workstation下ubuntu虚拟机无法上网连不上网络解决
    儒林外史人物——娄三、娄四公子
  • 原文地址:https://www.cnblogs.com/sz2003/p/14091597.html
Copyright © 2011-2022 走看看