Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2371986
  • 博文数量: 473
  • 博客积分: 12252
  • 博客等级: 上将
  • 技术积分: 4307
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-12 10:02
文章分类

全部博文(473)

文章存档

2012年(8)

2011年(63)

2010年(73)

2009年(231)

2008年(98)

分类: C/C++

2008-06-23 16:08:35


这几次封装函数,老出现这样的问题,总结一下:
原因:
        我想把我定义的结构体隐藏起来,不想让外部调用我接口的人看到我结构体内部的数据,而在头文件里只是定义了一个结构体变量。但是,我在调试程序时,又试图调用结构体内部的数据,就出现了上述问题。

错误的定义:
.h
typedef struct a a;

int a(a *p_a);


.c
struct a
{
    int b;
   char *c;
};
int a(a *p_a)
{
    .......
}

int main()
{
    a *pp;
    a(pp);
    printf("%d\n", pp->b);    //问题就出在这儿,因为命名是把结构体隐藏起来了
    printf("%s\n", pp->c); //却又在这里调它,  
}

解决问题的办法:
        要么把结构体暴露出来,要么返回一个结构体句柄,“鱼和熊掌不可兼得”
1:
.h
struct a
{
    int b;
   char *c;
};
typedef struct a a;

int a(a *p_a);

.c
int a(a *p_a)
{
    .......
}

int main()
{
    a *pp;
    a(pp);
    printf("%d\n", pp->b);   
    printf("%s\n", pp->c);
}



阅读(2483) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~