首页 > 解决方案 > “知识就是力量”c语言拼图

问题描述

输出应该是什么?这是代码:

#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;
}

输出:nowledge nowledge s

但这是实际问题,当我预递增时……指针只跳 1 个字符(见下图) 点击这里查看第一张图片

但是当我增加后指针会跳过整个元素 点击这里查看第二张图片

为什么 post 和 pre-increment 的工作方式不同?根据我的说法,在这两种情况下,它们应该只跳转 1 个字节/字符。我希望输出是nowledge nowledge wledge(虽然我错了,输出是nowledge nowledge s)

标签: c

解决方案


虽然“运算符优先级”很重要(尽管从技术上讲,C 没有任何优先级,而是使用允许表达式的语法,但您可以从该语法推导出一个优先级表)并解释如何*p++递增p- 它不是唯一的问题在这里。

像这样的表达

++*p

重要的是一元运算符的顺序。有了这些,你必须从右到左才能找到结果。因此,p首先取消引用,结果(在您的情况下是指向第一个字符串的指针)然后增加一个。

要获得p增量,您只需更改运算符的位置:

*++p

这首先增加然后取消引用。


推荐阅读