标题:tell out the output of the follow code, and explain the reason.
只看楼主
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
结帖率:100%
已结贴  问题点数:20 回复次数:12 
tell out the output of the follow code, and explain the reason.
程序代码:
#include<iostream>
#include<stdio.h>
using namespace std;
char *c[]={"ENTNG", "NST","AMAZI","FIRBE"};
char** cp[]={c+3, c+2, c+1, c};
char ***cpp= cp;
int main() {
    printf("%s\n",**++cpp);
    printf("%s\n",*--*++cpp+3);
    printf("%s\n",*cpp[-2]+3);
    printf("%s\n",cpp[-1][-1]+1);
}
搜索更多相关主题的帖子: follow reason color 
2011-01-10 20:10
马后炮
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:156
专家分:560
注 册:2010-12-17
得分:0 
发现有分,就进来看了一眼

樱之雪,晓之车
2011-01-10 20:13
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:0 
楼主又来卖弄 E 文了

我就是真命天子,顺我者生,逆我者死!
2011-01-10 20:30
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:0 
#include<iostream>
#include<stdio.h>
using namespace std;
char *c[]={"ENTNG", "NST","AMAZI","FIRBE"};
char **cp[]={c+3, c+2, c+1, c};
char ***cpp= cp;
int main()
{
    printf("%s\n",**++cpp);
    printf("%s\n",*--*++cpp+3);
    printf("%s\n",*cpp[-2]+3);
    printf("%s\n",cpp[-1][-1]+1);
    return 0;  //You make a mistake,I corret it
}
The following picture shows the result,but I am so sorry I do not kown why.How diffcult it is for me! Please come to someone else for help.




[ 本帖最后由 qq1023569223 于 2011-1-10 21:21 编辑 ]

   唯实惟新 至诚致志
2011-01-10 21:09
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
得分:0 
不习惯C语言指针表达方式,我令愿选汇编的间址还好

小代码,大智慧
2011-01-10 21:38
hust_sj
Rank: 3Rank: 3
来 自:湖北
等 级:论坛游侠
帖 子:94
专家分:116
注 册:2009-8-26
得分:20 
程序代码:
#include<stdio.h>
char *c[]={"ENTNG", "NST","AMAZI","FIRBE"};   

char** cp[]={c+3, c+2, c+1, c};   

char ***cpp= cp;   

int main() {
    printf("%s\n",**++cpp);    //cpp初始指向cp,++cpp后指向cp+1,*++cpp指向c+2,**++cpp指向"AMAZI"的'A',输出"AMAZI"
    printf("%s\n",*--*++cpp+3);    //cpp初始指向cp+1,++cpp后指向cp+2,*++cpp指向c+1,--*++cpp指向c,*--*++cpp指向"ENTNG"的'E',*--*++cpp+3指向"ENTNG"的'N',输出"NG"
    printf("%s\n",*cpp[-2]+3);    //cpp初始指向cp+1,cpp[-2]相当于*(cpp-2)即cp指向c+3,*cpp[-2]即c+3指向"FIRBE"的'F',*cpp[-2]+3指向"FIRBE"的'B',输出"BE"
    printf("%s\n",cpp[-1][-1]+1);    //cpp初始指向cp+1,cpp[-1]即cp+1指向c+2,cpp[-1][-1]即(cp+1)[-1]即c+1指向"NST"的'S',cpp[-1][-1]+1指向"NST"的'S',输出"ST"
    return 0;
}
[]相当于一次解引用*


[ 本帖最后由 hust_sj 于 2011-1-10 22:35 编辑 ]

每当我回完帖时,我都会默默的点一根烟,然后离开
2011-01-10 22:32
xdzsm
Rank: 2
等 级:论坛游民
帖 子:137
专家分:99
注 册:2010-10-26
得分:0 
见指针,头就大!
2011-01-10 22:34
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
得分:0 
explain the reason??
sorry
no reason!!!
ME is reason OK!

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-01-10 22:36
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
得分:0 
以下是引用hust_sj在2011-1-10 22:32:19的发言:

#include<stdio.h>
char *c[]={"ENTNG", "NST","AMAZI","FIRBE"};   

char** cp[]={c+3, c+2, c+1, c};   

char ***cpp= cp;   

int main() {
    printf("%s\n",**++cpp);    //cpp初始指向cp,++cpp后指向cp+1,*++cpp指向c+2,**++cpp指向"AMAZI"的'A',输出"AMAZI"
    printf("%s\n",*--*++cpp+3);    //cpp初始指向cp+1,++cpp后指向cp+2,*++cpp指向c+1,--*++cpp指向c,*--*++cpp指向"ENTNG"的'E',*--*++cpp+3指向"ENTNG"的'N',输出"NG"
    printf("%s\n",*cpp[-2]+3);    //cpp初始指向cp+1,cpp[-2]相当于*(cpp-2)即cp指向c+3,*cpp[-2]即c+3指向"FIRBE"的'F',*cpp[-2]+3指向"FIRBE"的'B',输出"BE"
    printf("%s\n",cpp[-1][-1]+1);    //cpp初始指向cp+1,cpp[-1]即cp+1指向c+2,cpp[-1][-1]即(cp+1)[-1]即c+1指向"NST"的'S',cpp[-1][-1]+1指向"NST"的'S',输出"ST"
    return 0;
}[]相当于一次解引用*



第一个printf之后,cpp指向哪里?
2011-01-11 00:03
hust_sj
Rank: 3Rank: 3
来 自:湖北
等 级:论坛游侠
帖 子:94
专家分:116
注 册:2009-8-26
得分:0 
回复 9楼 Devil_W
不是写的很清楚吗?

每当我回完帖时,我都会默默的点一根烟,然后离开
2011-01-11 00:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-330909-1-1.html




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

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