我对以下2个程序的输出感到困惑。有人可以解释优先级和关联性规则吗?
计划1:
char arr[] = "geeksforgeeks";
char *p = arr;
*p++;
printf(" %c", *p);
计划2:
char arr[] = "geeksforgeeks";
char *ptr = arr;
while(*ptr != '\0')
++*ptr++;
printf("%s %s", arr, ptr);
答案 0 :(得分:1)
首先让我们将您的程序简化为可比较的东西:
//# sourceMappingURL=angular.min.js.map
接下来让我们看一下operator precedence并假设我们期望发生的事情:
所以我们期望char arr[] = "geeksforgeeks";
char* p = arr;
*p++;
printf("%s %c\n", arr, *p);
char* ptr = arr;
++*ptr++;
printf("%s %c\n", arr, *ptr);
除了将*p++
提升到2 nd 位置之外没有任何影响,因为:
p
p
的地址而不增加地址我们希望p
增加当前字符并将++*ptr++
提升到2 nd 位置,因为:
ptr
ptr
的地址而不增加地址ptr
char
的值
醇>
通过查看此Live Example,您可以看到我们的假设是正确的,我们甚至会收到警告:
未使用计算值[-Wunused-value]
ptr
我们的结果是:
geeksforgeeks e
heeksforgeeks e