数组输出的内容乱起八糟,看起来自己写的代码根本没错,其实是函数结束时就释放掉了内存, 你可以加一个全局数组来接收数组。
我们以下面这个例子讲一下:
//问题描述:一本书的页码从自然数1开始顺序编码到自然数n。
//书的页码按照通常的习惯编排,每个页码都不包含多余的前导数字0,Eg:页码6 不使用 006 。
//数学计数问题要求给定书的总页码n,计算出书的全部页码分别用到了多少次数字0,1,2,3,... ,9.
#include <stdio.h>
#include <string.h>
int * totalSum(int n){
int a ,b=0;
int arr[10];
for(int i = 0;i<10 ;i++){
arr[i] = 0;
}
for(int i = 1; i<=n;i++){
b=i;
while(b>0){
arr[b%10]++;
b /= 10;
}
}
//输出0-9页码出现的次数
printf("第一次输出页码数:\n");
for(int i =0 ;i<10;i++){
printf("%d\n",arr[i]);
}
return arr;
}
int main(){
//设页码为11页
int *c = totalSum(11);
//输出0-9页码出现的次数
printf("第二次输出页码数:\n");
for(int i =0 ;i<10;i++){
printf("%d\n",c[i]);
}
}
输出结果:
改变代码,把arr[10]改成全局变量(注意看新加的第6行,删掉原先totalSum函数里的int arr[10]):
//问题描述:一本书的页码从自然数1开始顺序编码到自然数n。
//书的页码按照通常的习惯编排,每个页码都不包含多余的前导数字0,Eg:页码6 不使用 006 。
//数学计数问题要求给定书的总页码n,计算出书的全部页码分别用到了多少次数字0,1,2,3,... ,9.
#include <stdio.h>
#include <string.h>
int arr[10];
int * totalSum(int n){
int a ,b=0;
for(int i = 0;i<10 ;i++){
arr[i] = 0;
}
for(int i = 1; i<=n;i++){
b=i;
while(b>0){
arr[b%10]++;
b /= 10;
}
}
//输出0-9页码出现的次数
printf("第一次输出页码数:\n");
for(int i =0 ;i<10;i++){
printf("%d\n",arr[i]);
}
return arr;
}
int main(){
//设页码为11页
int *c = totalSum(11);
//输出0-9页码出现的次数
printf("第二次输出页码数:\n");
for(int i =0 ;i<10;i++){
printf("%d\n",c[i]);
}
}
输出结果: