【发布时间】:2018-02-06 08:48:19
【问题描述】:
所以我有这个main:
#define NUM 5
int main()
{
int a[NUM]={20,-90,450,-37,87};
int *p;
for (p=a; (char *)p < ((char *)a + sizeof(int) * NUM); ) //same meaning: for (p=a; p<a+NUM;)
*p++ = ++*p < 60 ? *p : 0; //same meaning: *(p++)=++(*p)<60?*p:0;
for(p=a; (char *)p < ((char *)a + sizeof(int) * NUM); )
printf("\n %d ", *p++);
return 0;
}
我需要找到输出是什么。 所以在尝试理解之后我运行它,这是输出:
21
-89
0
-36
0
所以我很乐意解释如何解决这类问题(我很快就要考试了,这类问题我可能会看到..)
编辑:
一开始我想了解第一个forstatement 在做什么:
这个跳转 1 integer ?块内发生了什么?
*p++和++*p有什么区别
【问题讨论】:
-
最好的办法是把你的调试器拿出来,逐行逐行执行。将此与构建您自己的小程序相结合。这是学习这些东西的唯一真正方法。
-
@Achilles:那是淘气的方式。请改用调试器。很好,上面加糖。
-
我很确定
*p++ = ++*p<60 ? *p : 0;是未定义的行为,因为您在多个地方访问和修改p和*p。这意味着程序已损坏。请不要写这样的废话。 -
我会咬紧牙关可能会失去分数,在问题上画一条线,然后在“垃圾代码,与良好的编码实践无关,应该从考试中删除不好的问题”之间写下。
-
@user2908206 这不是你的错,但这是一个可怕的问题。在你的考试中设置了一个可怕的问题,这对 SO 来说是一个可怕的问题。这个问题只测试和教导了一个教训,“永远不要编写编译器和任何人类读者都无法理解的棘手代码。”
标签: c