| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1510 人关注过本帖
标题:谁帮我解释一下..结构体的问题
只看楼主 加入收藏
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
结帖率:0
收藏
 问题点数:0 回复次数:17 
谁帮我解释一下..结构体的问题
#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]]
搜索更多相关主题的帖子: 结构体 解释 
2008-04-20 15:10
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
收藏
得分:0 
顶一下

欢迎长期在线的朋友加入此群:21135958
2008-04-20 15:13
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
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;

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2008-04-20 15:19
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
收藏
得分:0 
第二例子按道理讲函数结束了,变量的生存期就结束了啊..为什么还可以引用输出呢

欢迎长期在线的朋友加入此群:21135958
2008-04-20 15:19
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
收藏
得分:0 
曾怡的教程很多是错的

欢迎长期在线的朋友加入此群:21135958
2008-04-20 15:21
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
第二个只是告诉你sk.a 和p->a是一样的
都指向同一块内存区域
程序调用结束后,内存区域的值已经确定了
只要没有改变,任何时候读取都是一样的

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2008-04-20 15:26
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 

#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;
}


试试运行这个

" border="0" />

[[it] 本帖最后由 雨中飛燕 于 2008-4-20 16:06 编辑 [/it]]
2008-04-20 15:39
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
收藏
得分:0 
飞燕的好像也不对

欢迎长期在线的朋友加入此群:21135958
2008-04-20 15:45
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
燕子同学居然在C语言论坛使用析构函数……嘿嘿……

[[it] 本帖最后由 StarWing83 于 2008-4-20 16:43 编辑 [/it]]

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-04-20 15:46
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
楼上和楼上的楼上,你不清楚我的代码想要说明什么吧
麻烦先运行一次

" border="0" />
2008-04-20 15:48
快速回复:谁帮我解释一下..结构体的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020178 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved