论坛: 编程破解 标题: C语言基础问题提问 复制本贴地址    
作者: kert_t8 [kert_t8]    论坛用户   登录
我定义这样两个结构和这样一个函数
代码:

struct a {
    int i;
    int j;
};

struct b {
    int i;
    int j;
    int x;
    int y;
};

void func1(struct a * sa);



我在调用的时候使用
代码:

    ....
    struct b sb;
    ....
    func1((struct a *) sb);
    ....



这样会有什么样的危险呢?(假设我能够绝对保证struct b比struct a不少并且前半部分完全一样,a是b的子集)

另外,我单独编译一个这样的简单程序没有问题没有报警,但是在编译另外一个程序的时候(当然那个结构就比上面这个复杂多了,但是我用软件compare过两部分代码,前半部分绝对一样)会有报警说两个结构不兼容,我想请问为什么会有这种区别。我分析有可能两种原因,一是编译选项不同,导致同样的问题一个报警一个不报警,二则有可能是我的另外一个复杂的程序两个结构却是不匹配。如果是第二种情况就还要再想办法,所以我想弄清楚,以便决定是否忽略这个报警。

第三,这样做其实也是不方便的,因为人为的错误可能会导致a和b的结构不匹配,我其实就是想做一个struct的派生,不知道还有什么办法可以做

[此贴被 月之御者(kert_t8) 在 12月26日20时09分 编辑过]

地主 发表时间: 06-12-26 20:08

回复: virgoshaka [virgoshaka]   论坛用户   登录
看你的意思是要用struct b 类的对象来做struct a 类的操作?而struct b 是struct a 的派生,既然这样,就把func1()作为基类函数就可以了啊,调用的时候用b.func1()
当然,这是C++的方法,用C我就不知道了,呵呵

另外,你调用代码好像写错了哦,第二行是
func1((struct a *) &sb);
吧?


[此贴被 处女座的沙加(virgoshaka) 在 12月27日01时53分 编辑过]

B1层 发表时间: 06-12-27 01:48

回复: kert_t8 [kert_t8]   论坛用户   登录
嘿嘿,对对,应该是&sb,我sb了

我就是问用c怎么做

B2层 发表时间: 06-12-27 10:01

回复: NetMelody [mmgg00]   论坛用户   登录
简单的说就是传值和传址的区别

B3层 发表时间: 06-12-28 12:12

回复: ypy [ypy]   见习版主   登录
这样写应该没问题的啊
你把出错的两个结构发上来看看

B4层 发表时间: 07-01-05 13:50

回复: wojiaowoai [wojiaowoai]   论坛用户   登录
好好学习~

B5层 发表时间: 07-07-01 17:28

回复: kert_t8 [kert_t8]   论坛用户   登录
我用的时候没出错,真出错我也就不用了,我问的是大概会有些什么错误,因为我以前很少使用这样的方法来做,不知道会有什么样的隐患

还有,更正一下,struct b{}的结构其实应该写成
代码:

structb {
    struct a older;
    int x;
    int y;
}



B6层 发表时间: 07-07-02 11:59

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号