| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 952 人关注过本帖
标题:结构体的问题
只看楼主 加入收藏
黒渍
Rank: 2
等 级:论坛游民
帖 子:57
专家分:41
注 册:2009-7-16
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:7 
结构体的问题
#include"stdio.h"
struct st
{
    int a;
    char b;
};
struct st fun(struct st x);
{
    x.a=99;
    x.b='s';
    return(x);
}
main()
{
    struct st y;
    y.a=0;
    y.b='A'
    printf("%d,%c",x.a,x.b);
    y=fun(y);
        printf("%d,%c",x.a,x.b);
}

运行后出现:
>正在编译...
1>34.C
1>h:\我的程序\as\34.c(8) : error C2449: 在文件范围内找到“{”(是否缺少函数头?)
1>h:\我的程序\as\34.c(12) : error C2059: 语法错误 : “}”
1>生成日志保存在“file://h:\我的程序\as\Debug\BuildLog.htm”
1>as - 2 个错误,0 个警告
搜索更多相关主题的帖子: 结构体 
2009-07-25 18:05
prankmoon
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:161
专家分:921
注 册:2009-7-21
收藏
得分:10 
1. 首先,你需要把你输入的代码先仔细检查几遍,看看有没有基本的语法错误。比如这一行:
    y.b='A'
   结尾没有给出分号 ";"

2. 结构不能作为整体来传入,应该使用结构体的指针来传入,返回的也应该用结构体的指针:
程序代码:
/**
*      file_name:
*    description:
*
*        version:      1.0
*        created:      19:08 2009-7-25
*       revision:      none 
*       compiler:      VC6.0
*
*         author:      prankmoon@*        company:
*/
#include <stdio.h>

struct st
{
    int a;
    char b;
};

struct st *fun(struct st *x)
{
    x->a = 99;
    x->b = 's';

    return x;
}

int main(void)
{
    struct st y;
    struct st *x;
    y.a=0;
    y.b='A';
    printf("%d, %c\n", y.a, y.b);
    x = fun((struct st *)(&y));
    printf("%d, %c\n", x->a, x->b);

    return 0;
}


输出:
0, A
99, s

[[it] 本帖最后由 prankmoon 于 2009-7-25 19:12 编辑 [/it]]
2009-07-25 19:10
asmdaydream
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:中原
等 级:版主
威 望:13
帖 子:257
专家分:840
注 册:2009-5-10
收藏
得分:10 
定义fun函数的时候多谢了个;如下
struct st fun(struct st x);

常走夜路不怕黑 长沙PHP高薪招聘群6K+ 95926136
2009-07-25 19:10
黒渍
Rank: 2
等 级:论坛游民
帖 子:57
专家分:41
注 册:2009-7-16
收藏
得分:0 
回复 3楼 asmdaydream
按你的这样改过就行了,谢谢了。。。
不过好像新的ANSIC标准允许把结构体变量作为一个整体传送给相应的形参。。。
我也是看书上这样写的才这样编的
就是一直出问题。。。。。。

踏实学C
/*我的编程飞信群:9401431 互相学习,共同进步*/
2009-07-25 21:13
黒渍
Rank: 2
等 级:论坛游民
帖 子:57
专家分:41
注 册:2009-7-16
收藏
得分:0 
x = fun((struct st *)(&y));应该怎么理解呢??

踏实学C
/*我的编程飞信群:9401431 互相学习,共同进步*/
2009-07-25 21:41
prankmoon
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:161
专家分:921
注 册:2009-7-21
收藏
得分:0 
以下是引用黒渍在2009-7-25 21:13的发言:

按你的这样改过就行了,谢谢了。。。
不过好像新的ANSIC标准允许把结构体变量作为一个整体传送给相应的形参。。。
我也是看书上这样写的才这样编的
就是一直出问题。。。。。。


对,新标准已经允许直接传结构体类型的参数,而不是早期的必须用指针来传。在谭浩强的《C程序设计》1991年7月第1版的227页中间有这样一句话:
    "但原来的C标准不允许用结构体变量作为函数参数..."
在228页中间又有这样一句话:
    "ANSI C允许用整个结构体作为函数参数传递,但是必须保证实参与形参的类型相同。"

唉,老了。当时在学校的时候只是记住了要传递结构体必须用指针,久而久之就成了习惯;知识没有及时更新,害人那。
2009-07-25 23:04
prankmoon
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:161
专家分:921
注 册:2009-7-21
收藏
得分:0 
以下是引用黒渍在2009-7-25 21:41的发言:

x = fun((struct st *)(&y));应该怎么理解呢??

把结构体变量 y 的地址强制转换为 st 结构体类型的指针传递给函数,并返回一结构体类型的指针 x 。
2009-07-25 23:07
黒渍
Rank: 2
等 级:论坛游民
帖 子:57
专家分:41
注 册:2009-7-16
收藏
得分:0 
呵呵
行了,这样改了下就OK了。。。
还是要谢谢你们。。。
#include"stdio.h"
struct st
{
    int a;
    char b;
};
struct st fun(struct st x)
{
    x.a=99;
    x.b='s';
    return(x);
}
main()
{
    struct st y;
    struct st x;
    y.a=0;
    y.b='A';
    printf("%d,%c",y.a,y.b);
    x=fun(y);
        printf("%d,%c",x.a,x.b);
}

踏实学C
/*我的编程飞信群:9401431 互相学习,共同进步*/
2009-07-26 10:47
快速回复:结构体的问题
数据加载中...
 
   



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

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