嵌入式技术论坛
直播中

Mr_RMS

7年用户 327经验值
擅长:可编程逻辑 嵌入式技术 处理器/DSP 接口/总线/驱动 控制/MCU
私信 关注

结构体指针(转载)

这篇文章非常清楚,一定要转下
---------------------------------------------
这篇文章是九九年写的,这篇文章适合中级程序员。有不明白之处不要紧,多看几遍,然后花些时间上机操作及认真思考每个问题。遇到难题要研究、解决,难题出现于哪里?该用什么方式来解决?为什么要选择这个方式解决?有其它的解决方法吗?这样的解决方案完美吗?其实做个程序员这些基本的思考心得是要掌握的。记住;遇问题不要逃避,要面对现实、勇于挑战,仔细研究难题的所在,这样相信你会成功的!
  指针结构与指针的关系亦有两重:其一是在定义结构时,将指针作为结构中的一个成员;其二是指向结构的指针(称为结构指针)。前者同一般的结构成员一样可直接进行访问,后者是本节讨论的重点。
结构指针说明的一般形式是:
struct 结构类型名称 * 结构指针变量名;
例如:struct date * pdate, today;
说明了两个变量,一个是指向结构date的结构指针pdate,today是一个date结构变量。语句:
pdate = &today;
pdate today (struct date)
  year
  month
  day

通过结构变量today访问其成员的操作,也可以用等价的指针形式表示:
today.year = 2001;  等价于  (*pdate).year = 2001;
由于运算符"*"的优先级比运算符"."的优先级低,所以必须有"( )"将*pdate括起来。若省去括号,则含义就变成了"*(pdate.year)"。
在C语言中,通过结构指针访问成员可以采用运算符"->"进行操作,对于指向结构的指针,为了访问其成员可以采用下列语句形式:
结构指针->成员名;
这样,上面通过结构指针pdate访问成员year的操作就可以写成:
pdate->year = 2001;
如果结构指针p指向一个结构数组,那么对指针p的操作就等价于对数组下标的操作。
  结构指针是指向一种结构类型的指针变量,它是结构在内存中的首地址,结构指针具有一般指针的特性,如在一定条件下两个指针可以进行比较,也可以与整数进行加减。但在指针操作时应注意:进行地址运算时的放大因子由所指向的结构的实际大小决定。

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

回帖(1)

王栋春

2018-1-23 12:43:01
了解一下                  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分