C中数组疑惑

来源:百度知道 编辑:UC知道 时间:2024/09/27 08:21:40
数组有分动态数组和静态数组;
定义动态数组不对元素赋初值,数组元素没有确定的值;如:int a[10];
定义静态数组不对元素赋初值,所有元素初值为0;如:static int b[10];
那么我们经常使用的是哪一类的呢?我觉得是动态数组;
但如下:
int a[10]; printf("%d",a[5]);输出的是任意的一个数值(不知道有没有规则,老是同一个数值);数组a是动态数组吗?
int b[10]={1,2};printf("%d",b[5]);输出的就为0了,为什么呢?b是静态数组吗?

数组有分动态数组和静态数组;
动态数组,是指数组的元素个数,不是声明的时候就定下来,比如int []a=new int[i];这里的i也是变量,有可能为1,也可能为10。

静态数组,是指声明的时候,元素的个数就确定下来了,比如int a[10];

c语言中都是静态数组,c++中才有动态数组的概念。

楼主所说的并不是我上面说的这个含义
未经过初始化的数组的元素没有确定的值,但加static关键字后,数组所有元素初值为0。这是没有错的。

int a[10]; printf("%d",a[5]);输出的是一个不确定的数值,但一旦数组声明后,这个数值就是固定的了,并不会随时改变,所以老是同一个数值
照我上面所说的概念,你这里的数组谈不上动态不动态

int b[10]={1,2};printf("%d",b[5]);输出的就为0,因为它进行了初始化,虽然没有给其余的元素赋值,但初始化的时候,系统给它们赋值为0了
也谈不上动态不动态

也许与你想的有些偏差,static是一个比较特殊的修饰符,
全局变量或者数组用static来修饰,表示只在此文件中可以访问,别的文件中不可访问(对于多文件工程来说)。
函数内部的static表示该变量有全局的生存期,数据可以保持到程序结束,但只能在该函数内部访问,不像全局的变量。

静态的变量确实会全部初始化为0的,但int b[10] = {1, 2}这种与静态无关,是因为C语言中,如果使用初始化列表,则未初始化的元素自动置为零。
所以,一个常用的将所有元素置为零的技巧是:
int b[10] = {0}

在C语言中,一般情况下用的数组都是动态数组,因为它的灵活性好。用起来方便,你刚才上面说的两个数组都是动态数组。

不能叫动态数组吧,下边的那个是静态存储的,分配在堆上的int b[10]={1,2};叫做对数组初始化,个数不够就是0