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指向数组的最后一个元素。

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

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

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

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

  • 相关阅读:
    钱多多软件制作04
    团队项目01应用场景
    HDU 4411 arrest
    HDU 4406 GPA
    HDU 3315 My Brute
    HDU 3667 Transportation
    HDU 2676 Matrix
    欧拉回路三水题 POJ 1041 POJ 2230 POJ 1386
    SPOJ 371 BOXES
    POJ 3422 Kaka's Matrix Travels
  • 原文地址:https://www.cnblogs.com/yanghong-hnu/p/4711661.html
Copyright © 2011-2022 走看看