c++ c++

来源:百度知道 编辑:UC知道 时间:2024/05/15 14:45:25
#include"stdio.h"
main()
{ int x;
static int a[11];
printf("输入数字:");
scanf("%d",&x);
while(x)
{a[x]=a[x]+1;
printf("输入数字:");
scanf("%d",&x);
}
for(x=1;x<=10;x++)
printf("\ta[%d]=%d",x,a[x]);
printf("\n");
}

#include"stdio.h"
main()
{ int x,a[11];
printf("输入数字:");
scanf("%d",&x);
while(x)
{a[x]=a[x]+1;
printf("输入数字:");
scanf("%d",&x);
}
for(x=1;x<=10;x++)
printf("\ta[%d]=%d",x,a[x]);
printf("\n");
}
没加static就出现错误答案,能解释下吗?

我问一下!!!
就是加了static,就是正确答案了吗?

你加了static 只不过会把a[11]里面的元素都初始化为0,不加的话就没有初始化。另外加了static会把a[11]存放在静态栈内存,不加的话相当于堆内存

看不懂

分清局部变量和 全局变量,还有就是动态和静态

静态变量会被“自动初始化”为0,而自动变量则不会,将第二个程序中的int a[11];改为int a[11]={0};

上面的,你还没明白题目的意思。他的题目是,输入一个数组号,数组里的数加1。不信,你编译下。
1、一个静态(static)不进行初始化,则对数组型数组隐含初值为0,对字符数组隐含初值‘\0’
2、如果不对自动(auto)数组初始化,则其初始值为系统分配个数组各元素的内存单元。
答案当然错误了。