gpt4 book ai didi

c - "knowledge is power"c语言谜题

转载 作者:行者123 更新时间:2023-11-30 20:31:17 25 4
gpt4 key购买 nike

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

#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 个字符(见下图) click here to view 1st image

但是当我后递增时指针会跳转整个元素 click here to view 2nd image

为什么后增量和预增量的工作方式不同?根据我的说法,在这两种情况下,它们应该只跳转 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com