为什么不是想像中的结果

谁在墙外等红杏
企业官方账号
博客专家认证
2008-06-17 01:48:17
输出结果不是想像中的,为什么?谢谢!

#include <stdio.h>
typedef void (*printDel)();
typedef struct point
{
int x;
printDel print;
}point;
void print();
point* new_point();

point* new_point()
{
point* tmp=(point*)malloc(sizeof(point));
tmp->print=print;
return tmp;
}
void print()
{
point* tmp=new_point();
printf("%d",tmp->x);
}

int main(void)
{
point* x=new_point();
x->x=10;
x->print();
free(x);
getch();
return 0;
}


...全文
123 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
可以说有意义,也可以说没有意义.
没意义是因为我不是为了解决问题而去钻此的.
有意义是因为我想练练手而已..
abfahren2000 2008-06-17
  • 打赏
  • 举报
回复
你这样做有什么意义吗?
我建议你想清楚你要解决的问题,不要想得太局限,钻牛角尖...
  • 打赏
  • 举报
回复
14楼仁兄能否道来?
hai040 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ioriliao 的回复:]
[Quote=引用 10 楼 hqin6 的回复:]

x作为一个类的private数据成员

print作为这个类的public成员函数
[/Quote]


老兄我写的是C,而非C++
在C有办法解决否?
[/Quote]
c++其实也是加一个指针来实现成员函数
cppscript 2008-06-17
  • 打赏
  • 举报
回复
你想要输出什么啊
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hqin6 的回复:]

x作为一个类的private数据成员

print作为这个类的public成员函数
[/Quote]

老兄我写的是C,而非C++
在C有办法解决否?
myullian 2008-06-17
  • 打赏
  • 举报
回复
6楼正解
太乙 2008-06-17
  • 打赏
  • 举报
回复

x作为一个类的private数据成员

print作为这个类的public成员函数
太乙 2008-06-17
  • 打赏
  • 举报
回复
那就用class 的this指针!
  • 打赏
  • 举报
回复
给print给个参数的方法我想到了,不过我不想用这种方法,保持x->print();的样式,有办法解决吗?谢谢!
coverallwangp 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 akirya 的回复:]
void print()
{
point* tmp=new_point();
printf("%d",tmp->x);
}
打印的时一个新的point,而不是你之前的那个x对应的point。
[/Quote]
  • 打赏
  • 举报
回复

#include <stdio.h>

struct tagpoint;

typedef void (*printDel)(struct tagpoint*);
struct tagpoint
{
int x;
printDel print;
};
typedef struct tagpoint point;
void print(point*);
point* new_point();

point* new_point()
{
point* tmp=(point*)malloc(sizeof(point));
tmp->print=print;
return tmp;
}
void print(struct tagpoint* p)
{
printf("%d",p->x);
}

int main(void)
{
point* x=new_point();
x->x=10;
x->print(x);
free(x);
return 0;
}

zbing0203 2008-06-17
  • 打赏
  • 举报
回复
给print加个参数
#include <stdio.h>
#include <stdlib.h>

typedef void (*printDel)(struct point* tmp);

typedef struct point
{
int x;
printDel print;
}point;

void print(point* tmp);
point* new_point();

point* new_point()
{
point* tmp=(point*)malloc(sizeof(point));
tmp->print=print;
return tmp;
}
void print(point* tmp)
{
// point* tmp=new_point();
printf("%d",tmp->x);
}

int main(void)
{
point* x=new_point();
x->x=10;
x->print(x);
free(x);
getch();
return 0;
}
sukyin 2008-06-17
  • 打赏
  • 举报
回复
void print()
{
point* tmp=new_point();
printf("%d",tmp->x);
}

你在print里面新创建了一个tmp的对象,当然打印出来是乱码了,他的x没初始化啊
clhposs 2008-06-17
  • 打赏
  • 举报
回复
动态绑定
foxhill 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 ioriliao 的帖子:]
void print()
{
point* tmp=new_point();
printf("%d",tmp->x…

[/Quote]
打印之前有point* tmp=new_point();所以打印结果和你实际的设置数值不一致。
  • 打赏
  • 举报
回复
void print()
{
point* tmp=new_point();
printf("%d",tmp->x);
}
打印的时一个新的point,而不是你之前的那个x对应的point。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧