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

本文通过一个具体的C++程序实例,详细解析了指针和数组在内存中的操作及运算逻辑,包括指针的递增、间接寻址以及数组元素的访问方式等核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值