【发布时间】:2021-09-09 23:29:07
【问题描述】:
int main (void)
{
char c[] = "KATEWINCE";
char *p =c;
printf("%s", p+p[3]-p[1]) ;
return (0);
}
输出是 WINCE,但我不明白代码是如何工作的,请解释一下。
【问题讨论】:
-
假设您的字符是 ASCII 编码,查找字符
p[3]和p[1]的 ASCII 值。然后就是简单的指针算术。 -
我还建议你拿一些方格纸,将数组
c中的每个字母写在自己的方格中,然后做一个指向第一个字符的箭头。这个箭头是指针p。然后添加p[3]正方形并使箭头指向该正方形。然后减去p[1]并再次重绘箭头。这可能有助于您了解正在发生的事情。 -
p+p[3]-p[1]是p + 'E' - 'A'并假设字母编码是连续的,即p + 4这是"WINCE"开始的地方。 -
这是您在上课时分配的作业吗?这是一个可怕的、毫无意义的问题。指针算法是完全合理的;我们一直这样做。减去两个字符的值有时是有意义的(这并没有错)。但是很难想出一个现实的原因,为什么要减去两个字符的值,然后使用差值来做这样的指针运算。如果您了解
printf("%s", p+4)打印“WINCE”的原因,您就会了解指针运算的基本属性。字符减法只是混淆。 -
是的,我知道了...感谢您的帮助,是的,这是作业的一部分。
标签: c pointers arithmetic-expressions