题解 | #打印从1到最大的n位数#
打印从1到最大的n位数
https://www.nowcoder.com/practice/4436c93e568c48f6b28ff436173b997f
先上自己的思路的答案
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 最大位数 * @return int整型一维数组 * @return int* returnSize 返回数组行数 */ int* printNumbers(int n, int* returnSize ) { int* pi=(int*)malloc(101000*sizeof(int)); int* pr=pi; int m=9; for(int a=n;a>1;a--){ m=m*10+9; } *returnSize=m; for(int a=1;a<=m;a++,pr++){ *pr=a; } return pi;//这个是在栈上开辟的空间,随着函数栈帧的销毁而释放,一定要malloc }
这是第一次自己写的,会出现如下错误:
因为是在函数内部创建的数组,出函数后:由于是在stack上建立的空间,出栈后会被释放。至于释放空间后是否修改空间内的数据,则取决于编译器。此处则没有释放pi指向的空间,所以后面的内容能正常打印(因为有returnSize这个参数作保证,否则这些内存就被占用但是不再能找到了,内存就被吃掉了)。
不过这样的写法任然不够干练,既然我们都求出了m,直接使用malloc开辟m个大小的空间更能体现动态内存规划的作用。