qq_31739181
qq_31739181
采纳率71.4%
2016-02-13 04:16 阅读 1.3k

static的一个问题,运行结果和书上说的不一样。

#include
void fun1(static int v) {

printf("%d\n",v);

}
int main(void) {
fun1(50);
fun1(100);

return 0;

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

7条回答 默认 最新

  • 91program 91program 2016-02-13 04:31

    可能是书上搞错了吧,以实际编译/运行的结果为准。
    如果没有 static 时,结果肯定是 50 和 100;但就算是有了 static,传入参数的值是多少,printf 中应该是多少,不会由 static 的影响。

    点赞 4 评论 复制链接分享
  • 91program 91program 2016-02-13 04:51

    如果在 VS2018 中编程,首先会产生一个编译警告:
    warning C4042: “v”: 有坏的存储类
    然后,运行的结果也确实是:50 和 100.

    静态变量,确实如你所说只分配一次内存、且只初始化一次,但后继对静态变量的赋值是有效的。一般静态变量用在函数体中,上述描述是没有问题的。
    但如你所说的做为函数的参数,由于调用时会给参数完成一次赋值的过程,所以应该会改变静态变量的值。

    点赞 3 评论 复制链接分享
  • qq_31739181 qq_31739181 2016-02-13 04:18

    书上给结果是50 和 50,而运行结果是50 和 100

    点赞 评论 复制链接分享
  • u014634869 没理想的宝贝儿 2016-02-13 04:34

    我是一个初学者 不知道对不对 你可以找一些大神来问一下 我认为书上是对的 static内存只分配一次 返回值了之后下次返回的还是上一次的值 我不知道对不对 你再问问其他大神把

    点赞 评论 复制链接分享
  • qq_31739181 qq_31739181 2016-02-13 05:10

    书的原题是这样的:
    #include
    void fun1(int v) {
    static int value=v;
    }
    int main(void) {
    fun1(50);
    fun1(100);
    return 0;
    }
    没有输出语句,程序的输出应该为多少

    点赞 评论 复制链接分享
  • collin18 collin18 2016-02-18 12:02

    没有输出语句,就不会有输出结果的。

    点赞 评论 复制链接分享
  • u011491972 icesongqiang 2016-08-29 03:27

    你的核书上不一样,你就说书上错了。
    #include
    void fun1(int v) {
    static int value=v;
    printf("%d\n",v); // 50 50
    }
    int main(void) {
    fun1(50);
    fun1(100);
    return 0;
    }

    点赞 评论 复制链接分享

相关推荐