输出应该是什么? 这是代码:
#include <stdio.h>
int main()
{
char *s[]={"knowledge","is","power"};
char **p;
p=s;
printf("%s\n",++*p);
printf("%s\n",*p++);
printf("%s\n",++*p);
getchar();
return 0;
}
输出: 知识 知识 s
但实际的问题是, 当我预递增时...指针仅跳转 1 个字符(见下图)
但是当我后递增时指针会跳转整个元素
为什么后增量和预增量的工作方式不同?根据我的说法,在这两种情况下,它们应该只跳转 1 个字节/字符。我预计输出是nowledge 知识 楔子 (虽然我错了,输出是nowledge nowledge s)
最佳答案
虽然“运算符优先级”很重要(虽然从技术上讲,C 没有任何优先级,但使用允许表达式的语法,但您可以 deduce a precedence table from that grammar )并解释如何 *p++
递增 p
——这不是这里的唯一问题。
用这样的表达式
++*p
重要的是一元运算符的顺序。有了这些,你必须从右到左才能找到结果。因此,首先取消引用 p,然后将结果(在您的情况下是指向第一个字符串的指针)递增 1。
要让 p
递增,您只需更改运算符的位置即可:
*++p
首先递增,然后取消引用。
关于c - "knowledge is power"c语言谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51666441/