| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1079 人关注过本帖
标题:哪位高手能解释下如下的程序?
只看楼主 加入收藏
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
结帖率:92.45%
收藏
已结贴  问题点数:20 回复次数:17 
哪位高手能解释下如下的程序?
#include <stdio.h>
int main()  
{
    int a=3, b = 5;
    printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]);
    printf(&a["WHAT%c%c%c  %c%c  %c !\n"],
            1["this"],
            2["beauty"],
            0["tool"],
            0["is"],
            3["sensitive"],
            4["CCCCCC"]);
    return 0;
}
搜索更多相关主题的帖子: 解释 
2010-12-03 17:45
a343637412
Rank: 7Rank: 7Rank: 7
来 自:そ ら
等 级:黑侠
帖 子:357
专家分:620
注 册:2010-9-26
收藏
得分:0 
不会,帮忙顶...................以便学习
2010-12-03 18:58
venus85
Rank: 6Rank: 6
等 级:侠之大者
帖 子:159
专家分:477
注 册:2010-11-27
收藏
得分:10 
程序代码:
#include <stdio.h>
int main() 
{
    int a=3, b = 5;
    printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]);
    printf(&a["WHAT%c%c%c  %c%c  %c !\n"],
            1["this"],  /*输出字符数组的第1个元素,即h*/
            2["beauty"],/*输出字符数组的第2个元素,即a*/

            0["tool"],  /*输出字符数组的第2个元素,即t*/

            0["is"],    /*输出字符数组的第2个元素,即i*/

            3["sensitive"],/*输出字符数组的第3个元素,即s*/

            4["CCCCCC"]);/*输出字符数组的第4个元素,即C*/

    return 0;
} 
&a[]是从[]中的第a个元素开始输出,输出第a个元素到字符数组结尾的所有元素
至于为什么能这样输出,就不明白了,
我是对照运行结果推出来的,坐等真相!!!
运行结果:
Hello! how is this? super
That   is   C !
2010-12-03 19:10
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
牛 !!!!!!!!!!!

                                         
===========深入<----------------->浅出============
2010-12-03 19:42
枫花笑雪
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-12-3
收藏
得分:0 
回复 4楼 laoyang103
这个问题很难!不懂啊,等高手解决吧!
2010-12-03 20:00
outsider_scu
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:430
专家分:1333
注 册:2010-10-21
收藏
得分:0 
真有意思。。。感觉三楼手中有真理。。。
不过世上还有这么晦涩的代码,开眼了。。

编程的道路上何其孤独!
2010-12-03 20:07
a343637412
Rank: 7Rank: 7Rank: 7
来 自:そ ら
等 级:黑侠
帖 子:357
专家分:620
注 册:2010-9-26
收藏
得分:0 
顶........
2010-12-03 20:28
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:10 
#include <stdio.h>
#include<stdlib.h>

int main()
{
    int a=3, b = 5;
    //[]优先级比&高所以 &a["Ya!Hello! how is this? %s\n"] 等价于 &(*(a + "Ya!Hello! how is this? %s\n")
    //因为a == 3,所以(a + "Ya!Hello! how is this? %s\n") 向右偏移了4个字节到达H下面
    //然后遇到*解除引用  所以    *(a + "Ya!Hello! how is this? %s\n") == 'H'
    //然后又遇到&取得了指向存放'H'的ASCII码的内存地址由于该地址又是"Hello! how is this? %s\n"的首地址
    //所以&a["Ya!Hello! how is this? %s\n"] == "Hello! how is this? %s\n";
   
    //[]优先级比&高所以 &b["junk/super"] 等价于 &(*(b + "junk/super"))
    //因为b == 5,所以(b + "junk/super") 向右偏移了6个字节达到's'下面
    //然后遇到*解除引用  所以    *(b + "junk/super") == 's'
    //然后又遇到&取得了指向存放's'的ASCII码的内存地址    由于该地址又是"super"的首地址
    //所以&b["junk/super"] == "super";
   
    //所以printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]);的结果为:
    /*
     *        Hello! how is this? super (换行)
     */
    printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]);

    //比上面的还要简单
    //&a["WHAT%c%c%c  %c%c  %c !\n"] == &(*(a + ""WHAT%c%c%c  %c%c  %c !\n")) == "T%c%c%c %c%c %c !\n"
    printf(&a["WHAT%c%c%c  %c%c  %c !\n"],
        //1["this"] == *(1 + "this") == 'h'
        1["this"],
        //2["beauty"] == *(2 + "beauty") == "a"
        2["beauty"],
        //0["tool"] == *(0 + "tool") =='t'
        0["tool"],
        //0["is"] == *(0 + "is") == 'i'
        0["is"],   
        //3["sensitive"] == *(3 + "sensitive') == 's'
        3["sensitive"],
        //4["CCCCCC"] == *(4 + "CCCCCC") == "C"
        4["CCCCCC"]);
        

    /*****************************************
     *        结果为
     *        That  is  C ! (换行)
     *
     *        其实就是运算符'优先级'和'[]'(变址运算符迷惑了我们)
     *        
     *****************************************/
   
    system("pause");
    return 0;
}

My life is brilliant
2010-12-03 22:23
outsider_scu
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:430
专家分:1333
注 册:2010-10-21
收藏
得分:0 
楼上牛逼

编程的道路上何其孤独!
2010-12-04 10:43
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
tragedy啊, tragedy!

我就是真命天子,顺我者生,逆我者死!
2010-12-04 10:46
快速回复:哪位高手能解释下如下的程序?
数据加载中...
 
   



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

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