zoukankan      html  css  js  c++  java
  • (C)struct结构体指针

    结构体指针

      指针结构与指针的关系亦有两重:其一是在定义结构时,将指针作为结构中的一个成员;其二是指向结构的指针(称为结构指针)。

    前者同一般的结构成员一样可直接进行访问,后者是本节讨论的重点。

    结构指针说明的一般形式是:
          struct (结构类型名称) * (结构指针变量名);
    例如:struct date * pdate, today;
    说明了两个变量,一个是指向结构date的结构指针pdate,today是一个date结构变量。

    语句:

    struct date{

          int year;

          int month;

          int day;

          };
    pdate = &today;
      

      通过结构变量today访问其成员的操作,也可以用等价的指针形式表示:
          today.year = 2001;  等价于  (*pdate).year = 2001;
    由于运算符"*"的优先级比运算符"."的优先级低,所以必须有"( )"将*pdate括起来。若省去括号,则含义就变成了"*(pdate.year)"。

    在C语言中,通过结构指针访问成员可以采用运算符"->"进行操作,对于指向结构的指针,为了访问其成员可以采用下列语句形式:

          结构指针->成员名;

    这样,上面通过结构指针pdate访问成员year的操作就可以写成:

          pdate->year = 2001;

    如果结构指针p指向一个结构数组,那么对指针p的操作就等价于对数组下标的操作。

      结构指针是指向一种结构类型的指针变量,它是结构体在内存中的首地址。

    结构指针具有一般指针的特性,如在一定条件下两个指针可以进行比较,也可以与整数进行加减。

    但在指针操作时应注意:进行地址运算时的放大因子由所指向的结构的实际大小决定。

    例1:用结构指针改写加密程序。

    #include "stdio.h"
    
    
    struct table{
                    char input;
                    char output;
                };
    
    /* 建立加密对照表 */
    struct table translate[ ]={ 'a', 'd', 'b', 'w', 'c', 'k', 'd', ';' , 'e', 'i',
                                 'i', 'a', 'k', 'b', ';', 'c', 'w', 'e'
                            };
    /*主函数*/
    main( )
    { 
        char ch;
        /* p和pend为指向结构table的指针 */
        struct table *p;
        struct table *pend; 
        /* pend指向结构数组translate的最后一个元素 */
        pend = & translate[ sizeof(translate)/sizeof(struct table)-1 ];
    
        while ((ch=getchar( )) != '/n')
        { 
            for (p=translate ; p->input!=ch && p!=pend; p++);
            if (p->input == ch)
                    putchar(p->output);
            else
                    putchar(ch);
        }
    }

    读者可以将两个程序对照阅读,体会结构指针特点。程序中用pend指向数组的最后一个元素。

    由于结构指针和在结构中将指针作为成员,使得对于结构变量的运算和对成员的操作变得较为复杂。

    由于取内容的"*"与"."和"->"运算符的优先级与结合性不同,使得对成员的访问和操作又增加了一层难度,

    再因为"++"和"--"运算所具有的"先操作"与"后操作"的特性,

    以及"++"和"--"运算的结合性,使得"++"和--"运算与结构操作混合在一起时,实际操作会更为复杂。

  • 相关阅读:
    JSP 编码解说
    window系统之mongoDB安装,启动及如何设置为windows服务(总结)
    operator 安装
    JavaScript学习2
    JavaScript学习3
    win7的便签很好使
    COM技术内幕第九章笔记编程工作的简化
    VS乱码之UTF8篇
    必须而不是推荐尽量使用const引用参数
    查看不到网络连接(可以上网)
  • 原文地址:https://www.cnblogs.com/yanghong-hnu/p/4711661.html
Copyright © 2011-2022 走看看