首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何用C模拟C++的引用 [已结帖,结帖人:xiaozhuozhuo]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xiaozhuozhuo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-11-06 15:58:35 楼主
    C++里可以这样引用:
    void func(int &i){i=4;}
    int a(2);
    func(a);//a变成4了

    C怎么实现呢?使得:
    void func(int _YingYong(i) ) {i=4;}
    int a=2
    func( _YingYong(a) );//a变成4了

    怎么办了?

    PS:可以用宏 也可以内联汇编等任何方法、
    不要搞成这样:
    void func(int *i ) {*i=4;}
    int a=2;
    func( &a );
    这样就不是我要的答案了,我是要  “模拟C++的引用”  。
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lbh2001
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:04:061楼 得分:5
    怎么会有这种要求,C不支持运算符重载,貌似不可能
    这需要编译器支持吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xhs_lh04
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:11:462楼 得分:10
    C/C++ code
    int func(int a) { a =4; return a; } #define _YingYong(x) do { \ int *p=&x; *p = func(x); \ } while(0) int main() { int a; _YingYong(a); printf("this a is %d\n", a); return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xiaozhuozhuo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:13:233楼 得分:0
    用宏啊 但达不到我想要的“模拟”效果
    void func(int _YY(i) ) {i=4;} => #define _YY(i) *i 还要在函数里#define i (*i)再enddef…
    int a=2                     
    func( _YY(a) );//a变成4了      => #define _YY(i) &i
    乱气八遭的 但理论上 可行了吧

    再就是汇编啊 我不熟 也许可以用“别名”吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cyj626
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:17:004楼 得分:0
    c++ 编译器怎么做的,用它的方法
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xiaozhuozhuo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:19:545楼 得分:0
    @风中白杨

    显然你的不是我想要的啊

    @好好学习

    咩知C++编译器怎么做的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • redleaves
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:21:096楼 得分:10
    C本身没办法了,自己搞个预处理器吧...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • devil_zuiai
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:21:447楼 得分:10
    C/C++ code
    #include <stdio.h> void fun(int a) { int *p = (int*)a; *p = 4; } int main() { int a =9; printf("%d", a); int *p = &a; int b = (int)p; fun(b); printf("%d", a); return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yu200205
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:28:068楼 得分:5
    引用 2 楼 xhs_lh04 的回复:
    C/C++ code
    int func(int a)
    {
      a =4;
      return a;
    }

    #define  do { \
      int *p=&x; *p = func(x); \
    } while(0)

    int main()
    {
      int a;

      _YingYong(a);
      printf("this a is %d\n", a);
      return 0;
    }


    上面如果把_YingYong(x),再增加一个参数,函数指针!把要调用的函数返回就可以完全实现c中的引用。只是调用方式不一样了,呵呵~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xiaozhuozhuo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:30:269楼 得分:0
    引用 7 楼 devil_zuiai 的回复:
    这不是“模拟”吧?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nicholas101
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:59:2310楼 得分:0
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zmlovelx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 18:22:4011楼 得分:0
    问下c++之父
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • firstdad
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 22:06:4012楼 得分:0
      引用的内部也是通过指针实现的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Zark
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 22:36:4213楼 得分:0
    设计要求不合理,明明是苹果树,非要开牡丹花,有现实的意义吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • BaihowFF
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 22:57:3814楼 得分:0
    其实引用就是指针啊...只不过指针是个常量..只能改引用的内容..不能改变所指...
    比如:
    C/C++ code
    int a; int &r=a; // 其实这和下面是一样的 int *const p=&a;

    不过在C里面好像没有const吧...没有就不要const罗...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • leboc
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-07 00:14:1815楼 得分:0
    进来看看,很好奇如果可以引用,c怎么实现共享同一空间.
      期待高手~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yzfyzyl
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-07 00:22:3016楼 得分:0
    为什么要这么苛求呢?



    飞燕算法群:46520219
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hqin6
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-07 00:30:0917楼 得分:0
    up~~~~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lann64
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-07 00:47:2018楼 得分:10
    楼主要是功能模拟,实现功能并不难,你自己的例子就是了,其他的象增加参数、传结构什么的都可以。
    要是语法模拟,那个没可能,宏也只是看上去有点像。
    c是值传递,要达到修改实参就得实现地址传递。c既不支持地址传递,也没有类能绑定,还不支持重载,无法实现。
    c就是c,模拟可以,再怎么模拟也不能达到跟c++一样方式来使用引用。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xiaozhuozhuo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-07 11:01:0319楼 得分:0
    大家好我是楼主 !大家有话留言 没话帮顶!

    为什么我要这么做呢?因为我看到了希望——我认为理论上能模拟

    大家想想,怎么把下面的函数代码:

    f(int _YY(b) ){
        b=4;
    }
    通过宏定义变成:
    f(int *_YY_b){
        int b=*_YY_b;
          b=4;
        *_YY_b=b;
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • BaihowFF
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-10 18:22:4820楼 得分:0
    引用 19 楼 xiaozhuozhuo 的回复:
    大家好我是楼主 !大家有话留言 没话帮顶!

    为什么我要这么做呢?因为我看到了希望——我认为理论上能模拟

    大家想想,怎么把下面的函数代码:

    f(int _YY(b) ){
        b=4;
    }
    通过宏定义变成:
    f(int *_YY_b){
        int b=*_YY_b;
          b=4;
        *_YY_b=b;
    }

    用宏也不能凭空在最后加一句啊....
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved