C语言——一道有意思的指针

int main()
{
	char* c[] = {"ENTER","NEW","POINT","FIRST" };
	char* *cp[] = { c + 3,c + 2,c + 1,c };
	char** *cpp = cp;
	printf("%s\n", **++cpp);

	printf("%s\n", *--*++cpp+3);

	printf("%s\n", *cpp[-2]+3);

	printf("%s\n", cpp[-1][-1]+1);
	//画图
	return 0;
}

 如何去解决这道题,就需要画图,更好的理解指针?   

图解:

 1.对于**++cpp:  先进行++运算,++cpp=cp+1这块地址,*++cpp,就是取出cp+1这块地址所指向的空间的内容,所以*++cpp=c+2;而对c+2解引用就会指向常量字符串“POINT”中的字符P的地址,而打印时,是%s打印,所以打印的结果就是"POINT"。

2.*--*++cpp+3:就要考虑运算符的优先级了,最后进行+3的操作,对cpp再进行++操作,就会指向cp+2这块地址,解引用就是c+1;所以说*--*++cpp=*--(c+1);对c+1进行减减操作,就是c,解引用就指向“ENIER"中的”E“的地址,再进行+3操作,就是指向第二个”E“的地址。

3.4.你会分析嘛!试一试,是不是很有意思

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值