谁帮我解释一下..结构体的问题
#include "stdio.h"#include "conio.h"
struct s
{
int a;
char b;
};
struct s* bi(struct s d)
{
struct s *p1;
d.a=100;
d.b='a';
p1=&d;
return &d;
}
int main()
{
struct s *p;
struct s sk;
sk.a=155,sk.b='z';
printf("%d,%c\n",sk.a,sk.b);
p=bi(sk);
printf("%d,%c\n",p->a,p->b);//这个结果为什么 100 a
getch();
return 0;
}
===============================================
#include "stdio.h"
#include "conio.h"
struct s
{
int a;
char b;
};
struct s* bi(struct s d)
{
struct s *p1;
d.a=100;
d.b='a';
p1=&d;
return p1;
}
int main()
{
struct s *p;
struct s sk;
sk.a=155,sk.b='z';
p=bi(sk);
printf("%d,%c\n",sk.a,sk.b);
printf("%d,%c\n",p->a,p->b); //这个为什么是155 z呢.p不是接受bi函数的地址吗?
getch();
return 0;
}
[[it] 本帖最后由 bianfeng 于 2008-4-20 15:14 编辑 [/it]]
----------------解决方案--------------------------------------------------------
顶一下
----------------解决方案--------------------------------------------------------
struct s* bi(struct s d)
{
struct s *p1; //此行去掉
d.a=100;
d.b='a';
p1=&d; //此行也去掉
return &d;
}
这个函数真是奇怪,无非是把结构d的内容初始化了一下,局部指针很多余,甚至可以做成void型的,调用者直接用d的地址就行了
写成这样功能一样
void bi(struct s d)
{
d.a=100;
d.b='a';
}
调用处p=bi(sk);改成这样
bi(sk);
p = &sk;
----------------解决方案--------------------------------------------------------
第二例子按道理讲函数结束了,变量的生存期就结束了啊..为什么还可以引用输出呢
----------------解决方案--------------------------------------------------------
曾怡的教程很多是错的
----------------解决方案--------------------------------------------------------
第二个只是告诉你sk.a 和p->a是一样的
都指向同一块内存区域
程序调用结束后,内存区域的值已经确定了
只要没有改变,任何时候读取都是一样的
----------------解决方案--------------------------------------------------------
#include "stdio.h"
typedef struct s
{
int a;
char b;
~s(){a=0;b=0;}
}s;
struct s* bi(struct s d)
{
d.a=100;
d.b='a';
return &d;
}
int main()
{
struct s *p;
struct s sk;
sk.a=155,sk.b='z';
printf("%d,%c\n",sk.a,sk.b);
p=bi(sk);
printf("%d,%c\n",p->a,p->b);
return 0;
}
试试运行这个
[[it] 本帖最后由 雨中秣燕 于 2008-4-20 16:06 编辑 [/it]]
----------------解决方案--------------------------------------------------------
飞燕的好像也不对
----------------解决方案--------------------------------------------------------
燕子同学居然在C语言论坛使用析构函数……嘿嘿……
[[it] 本帖最后由 StarWing83 于 2008-4-20 16:43 编辑 [/it]]
----------------解决方案--------------------------------------------------------
楼上和楼上的楼上,你不清楚我的代码想要说明什么吧
麻烦先运行一次
----------------解决方案--------------------------------------------------------