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

标签 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;
}

输出: 知识 知识 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/

相关文章:

c - 在函数中使用两次时 strtol 函数的异常行为

c - 双向链表快速排序 C

c - 结构内部具有未初始化大小的数组

c - libcurl 库是否提供了任何方法来确定哪个响应头来自哪个命令?

java - Visual Studio Express 2008 C/C++ 能否与 VSE Java 在同一台机器上共存?

c - 优先队列插入

c - lua中的printf格式化

c - Linux 消息队列的接收端应该放什么键?

c++ - 如何为给定的int找到最近的偶数? (给定 11 返回 12)

c - 使用 c 中的结构(三元组形式)添加稀疏矩阵