随笔 - 251  文章 - 504  trackbacks - 0
<2006年11月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

本博客系个人收集材料及学习记录之用,各类“大侠”勿扰!

留言簿(14)

随笔分类

收藏夹

My Favorite Web Sites

名Bloger

非著名Bloger

搜索

  •  

积分与排名

  • 积分 - 200061
  • 排名 - 285

最新评论

指向结构的指针

为什么使用指向结构的指针?

1  就像指向数组的指针比数组本身更容易操作一样,指向结构的指针通常都比结构本身更容易操作.

2  在一些早期的 C 实现中,结构不能作为参数被传递给函数,但指向结构的指针可以.

3  许多奇妙的数据表示都使用了包含指向其他结构的指针的结构.
下面是个例子:

/* friends.c -- uses pointer to a structure */
#include <stdio.h>
#define LEN 20

struct names {
    char first[LEN];
    char last[LEN];
};

struct guy {
    struct names handle;
    char favfood[LEN];
    char job[LEN];
    float income;
};

int main(void)
{
    struct guy fellow[2] = {
        {{ "Ewen", "Villard"},
         "grilled salmon",
         "personality coach",
         58112.00
        },
        {{"Rodney", "Swillbelly"},
         "tripe",
         "tabloid editor",
         232400.00
        }
    };
    struct guy * him;    /* 声明指向结构的指针,这个声明不是建立一个新的结构,而是意味
             着指针him现在可以指向任何现有的guy类型的结构*/
  
    printf("address #1: %p #2: %p\n", &fellow[0], &fellow[1]);
    him = &fellow[0];    /* 告诉该指针它要指向的地址  */
    printf("pointer #1: %p #2: %p\n", him, him + 1);
    printf("him->income is $%.2f: (*him).income is $%.2f\n",
         him->income, (*him).income);
    him++;               /*指向下一个结构*/
    printf("him->favfood is %s:  him->handle.last is %s\n",
         him->favfood, him->handle.last);
   
    return 0;
}

输出结果:
address #1: 0240FEB0 #2: 0240FF04
pointer #1: 0240FEB0 #2: 0240FF04
him->income is $58112.00: (*him).income is $58112.00
him->favfood is tripe:  him->handle.last is Swillbelly
Press any key to continue...


 

 从输出看出 him 指向 fellow[0],him+1 指向 fellow[1] .注意 him 加上 1 ,地址就加了 84 .这是因为每个 guy 结构占用了 84 字节的内存区域.
 使用指针访问成员的方法:

1   him->income 但是不能 him.income ,因为 him 不是一个结构名.

2  如果 him=&fellow[0], 那么 *him=fellow[0] .因为 & * 是一对互逆的运算符.因此,可以做以下替换:
fellow[0].income= =(*him).income 注意这里必须要有圆括号,因为 . 运算符比 * 的优先级高.

 

 

posted on 2006-11-09 19:12 matthew 阅读(708) 评论(0)  编辑  收藏 所属分类: 阅读笔记

只有注册用户登录后才能发表评论。


网站导航: