c语言输出数组时输出的乱七八糟

    技术2024-12-11  23

    数组输出的内容乱起八糟,看起来自己写的代码根本没错,其实是函数结束时就释放掉了内存, 你可以加一个全局数组来接收数组。

    我们以下面这个例子讲一下:

    //问题描述:一本书的页码从自然数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]); } }

    输出结果:

    Processed: 0.010, SQL: 9