码迷,mamicode.com
首页 > 其他好文 > 详细

对一个程序的思考6(指针与指针的指针)

时间:2015-08-09 00:27:25      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

#include <iostream>
#include <cstring>
using namespace std;

char *c[] = { "ENTER", "NEW", "POINT", "FIRST" }; 
char **cp[] = { c+3, c+2, c+1, c }; 
char ***cpp = cp; 

int main(void)
{ 
    printf("%s", **++cpp);
    
    printf("%s", *--*++cpp+3); 
  
    printf("%s", *cpp[-2]+3); 

    printf("%s\n", cpp[-1][-1]);

    return 0;

}

//下面是题的解析
#include <iostream>
#include <cstring>
using namespace std;

char *c[] = { "ENTER", "NEW", "POINT", "FIRST" }; 
char **cp[] = { c+3, c+2, c+1, c }; 
char ***cpp = cp; 

int main(void)
{ 
    printf("%s", **++cpp);
	//++cpp (这个其实就相当于 cpp =cpp+1)这里可以理解为相当于cpp+1,加上第一个*就是*(cpp+1) 就是cp[1] 就是c+2  
	//再加上第二*就是*(c+2) 就是c[2] 所以输出POINT
   //注意cpp改变了
	printf("%s", *--*++cpp+3); 
   //此处一定注意前边的cpp已经被改变了此时cpp指向cp[1]加上第一个*就是cp[1]的值
  //此时再++就相当于cp[2] 下来再-- 就是相当于 c+1-1就是c再*就是c[0],再+3就是从第四(0,1,2,3所以第四个)个字母开始
  //所以输出ER
 //注意cpp改变了
    printf("%s", *cpp[-2]+3); 
	//现在可以改写一下 就是*  *(cpp-2) +3 此时cpp指向cp[2] 所以-2就是指向cp[0] 
	//再*就是cp[0]  也就是c+3 再*就是c[3], 再+3就是从第四(0,1,2,3所以第四个)个字母开始
	//所以输出ST 
	//注意cpp没有改变
    printf("%s\n", cpp[-1][-1]);
	//改写 cpp[-1] 也就是*(cpp-1)   此时cpp指向 cp[2]所以减一后指向cp[1] 
	//(c+2)[-1]+1  
	//再改写 *(cp+2 -1) +1   就是 *(cp+1)+1  就是 c[1]+1 就是从c[1]的第二(0,1所以第二个字母)开始
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

对一个程序的思考6(指针与指针的指针)

标签:

原文地址:http://blog.csdn.net/kai8wei/article/details/47364019

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!