首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >--a与a--,运算符优先级

--a与a--,运算符优先级
EN

Stack Overflow用户
提问于 2017-10-16 09:30:11
回答 1查看 50关注 0票数 0
代码语言:javascript
运行
复制
#include <stdio.h>
#include <stdlib.h>

#define TRUE  1
#define FALSE 0

void recursion (int a) {
    if (a != 0) {
        recursion(--a); //works
        recursion(a--); //does not work
        printf("%d\n", a);
    } 
}

int main (int argc, char *argv[]) {
    printf("start\n");
    recursion(10);
    printf("finished\n");
    return 0;
}

为什么当我递归(a--)时会出现分段错误,但当我递归(--a)时却可以正常工作?

我不认为递归(a--)由于未定义的行为而是错误的,因为它只有一个副作用,那就是将a减去1。这个副作用正是我想要的。谢谢。

EN

Stack Overflow用户

发布于 2017-10-16 09:41:45

--aa--都有增加a的副作用。不同之处在于,表达式--a的值是递减后的a的值,而a--的值是递减前的a的值。

因此,在后一种情况下,a的相同值以递归方式传递给函数。因此,你有一个无限的递归循环,这会导致堆栈溢出。

您需要对递归调用使用recursion(--a),以便将a的减量值传递给函数。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46761784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档