当前位置: 代码迷 >> C语言 >> 谁帮我解释一下..结构体的问题
  详细解决方案

谁帮我解释一下..结构体的问题

热度:179   发布时间:2008-04-20 15:10:02.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 &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]]
----------------解决方案--------------------------------------------------------
楼上和楼上的楼上,你不清楚我的代码想要说明什么吧
麻烦先运行一次


----------------解决方案--------------------------------------------------------