题解 | #打印从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个大小的空间更能体现动态内存规划的作用。
查看17道真题和解析

