关于C语言中的for语句

问题遇到的现象和发生背景

C语言
for语句

运行结果及报错内容

#include<stdio.h>
int main()
{
double sum_1 = 0,m=1;
int k, i;
for ( i= 1; i <= 20; i++)
{

    for (k = 1; k <= i; k++)
    {
        m *= k;

    }
    sum_1 += m;
}
printf("%lf", sum_1);
return 0;

}

_
"m=1"这个点。这个是错的,但把m弄到第一个for语句里面“double m=1;"的话就又对了。我感觉两个地方都一样啊!为什么啊?
_

我想要达到的结果

m在两个地方的逻辑分别是什么啊?

放在循环里,每次循环m的值都会初始化为1
放在外面,m的值就会一直累积

当然不一样啊。m值是内层循环的统计数,需要在内层循环开始前清零啊,否则会形成累加的