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;
}
输出:nowledge nowledge s
但这是实际问题,当我预递增时……指针只跳 1 个字符(见下图)
但是当我增加后指针会跳过整个元素
为什么 post 和 pre-increment 的工作方式不同?根据我的说法,在这两种情况下,它们应该只跳转 1 个字节/字符。我希望输出是nowledge nowledge wledge(虽然我错了,输出是nowledge nowledge s)
解决方案
虽然“运算符优先级”很重要(尽管从技术上讲,C 没有任何优先级,而是使用允许表达式的语法,但您可以从该语法推导出一个优先级表)并解释如何*p++
递增p
- 它不是唯一的问题在这里。
像这样的表达
++*p
重要的是一元运算符的顺序。有了这些,你必须从右到左才能找到结果。因此,p
首先取消引用,结果(在您的情况下是指向第一个字符串的指针)然后增加一个。
要获得p
增量,您只需更改运算符的位置:
*++p
这首先增加然后取消引用。
推荐阅读
- android - 'this@ActivityName' 未捕获错误 Android/Kotlin
- react-native - 使用 Galaxy J5 进行 USB 调试时 React-native Build 失败
- google-data-studio - 为什么 Google Data Studio 中只应用了第一个 case 语句?
- python - Plotly-Dash:使用“updatemenus”作为“update_layout”的一部分更新图表的“值”,即使硬编码也会显示错误的数据
- swift - swift中组件的唯一字符(separatedBy :)
- swift - Armadillo C++ 库 - C++11 编译器需要错误
- sql - 将 csv 文件从 postgresql 数据库服务器导出到本地计算机
- python - 忽略列表中的 none 并在 python 中取最小值和最大值
- javascript - 传递给函数时,对象索引数组被打乱
- r - R翻译curl命令以发布多部分形式 - 问题