考虑一个表达式*(1+"AB" "CD"+1)
这个表达式的解法是什么?上面的表达式是C语言中的一个switch表达式。
*(2+"AB" "CD") --> *(2+"ABCD") --> ?
之后我应该做什么?
下面是代码片段:
#include<stdio.h>
void main(){
switch(*(1+"AB" "CD"+1)){
case 'A':printf("Pulp Fiction");
break;
case 'B':printf("12 Angry Man");
break;
case 'C':printf("Casabance");
break;
case 'D':printf("Blood Diamond");
}
}
卡萨班斯。
如果你有
char *cp;
int i;
then cp[i] == *(cp+i) == *(i+cp) == i[cp]
.
C11 6.5.2.1:
后缀表达式,后跟方括号 [] 中的表达式
是数组对象元素的下标名称。这
下标运算符 [] 的定义是 E1[E2] 等于
(*((E1)+(E2)))。
和 C11 6.5.6:
当对整数类型的表达式进行加法或减法时
对于指针,结果具有指针操作数的类型。如果
指针操作数指向数组对象的元素,并且数组
足够大,结果指向与
原始元素使得下标的差异
结果和原始数组元素等于整数表达式。
就编译器而言,字符串文字只是一个字符指针。
两个相邻的字符串文字自动连接成一个字符串文字:
C11 6.4.5:
在翻译阶段 6,由指定的多字节字符序列
任何相邻字符和相同前缀字符串的序列
文字标记连接成单个多字节字符
顺序。
So... *(1+"AB" "CD"+1) == *(1+"ABCD"+1) == *("ABCD"+1+1)==*("BCD"+1) == "BCD"[1] == 'C'
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)