2个回答
展开全部
终于看到一点有意思的问题了,不错
回答这些问题之前,有必要说明得提前注意几个东西,就是函数的参数和变量是怎么样存储的
第一题,printN2是一个递归函数,参数是一个int类型的N,这个参数存储在什么地方呢?答案是跟局部变量一样存在栈里,其实这种值传递的函数编译器会自动复制一个传入的值存在栈里,就是这里的N,等到程序返回是,这个N才会被回收,然而这是个递归,所以N要等N-1,依次类推,知道0,但是由于这些内存都没有回收,所以如果N的值很大,就会导致栈满了,所以程序就会崩溃,那么怎么找这个最大的N呢,得看你的内存,假如你的内存4G64位,通常栈不会很大,那么一个int类型占四个字节,你可以除一下可以有多少个int类型,这是第一题
第二题,就是刚刚说的局部变量,你在main里想创一个a[10000][10000]的整型数组,那么你就得考虑到这个数组会占用多大的内存,栈大小跟机器和编译器有关系,所以有可能你创建不了这么大的数组
第三题其实结果跟机器和环境也是有关系的,我的机器输入2和3也会直接崩溃,但是输入4会输出pi的值,同理,你声明的是一个2个元素的数组,但是你传递的值超过了1,也就是数组越界了,有可能直接崩溃,有可能访问的是无效的内存,这种情况下也是能输出pi的
回答这些问题之前,有必要说明得提前注意几个东西,就是函数的参数和变量是怎么样存储的
第一题,printN2是一个递归函数,参数是一个int类型的N,这个参数存储在什么地方呢?答案是跟局部变量一样存在栈里,其实这种值传递的函数编译器会自动复制一个传入的值存在栈里,就是这里的N,等到程序返回是,这个N才会被回收,然而这是个递归,所以N要等N-1,依次类推,知道0,但是由于这些内存都没有回收,所以如果N的值很大,就会导致栈满了,所以程序就会崩溃,那么怎么找这个最大的N呢,得看你的内存,假如你的内存4G64位,通常栈不会很大,那么一个int类型占四个字节,你可以除一下可以有多少个int类型,这是第一题
第二题,就是刚刚说的局部变量,你在main里想创一个a[10000][10000]的整型数组,那么你就得考虑到这个数组会占用多大的内存,栈大小跟机器和编译器有关系,所以有可能你创建不了这么大的数组
第三题其实结果跟机器和环境也是有关系的,我的机器输入2和3也会直接崩溃,但是输入4会输出pi的值,同理,你声明的是一个2个元素的数组,但是你传递的值超过了1,也就是数组越界了,有可能直接崩溃,有可能访问的是无效的内存,这种情况下也是能输出pi的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询